問題描述
我已經建立了關系和模型如下:
I have set up the relationship and the models as below:
數(shù)據(jù)透視表架構
Schema::create('friend_user', function(Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->integer('friend_id')->unsigned();
$table->timestamps();
});
數(shù)據(jù)透視表播種器(這定義了用戶1"所屬的兩個友誼",一個是在 user_id 中指定了用戶 1,另一個是在朋友 ID 中列出了用戶 1):
pivot table seeder (this defines two 'friendships' to which user '1' belongs one where user 1 is specified in the user_id and the second where user 1 is listed in the friend id):
$friend_user = array(
array(
'id' => 1,
'user_id' => 1,
'friend_id' => 3,
),
array(
'id' => 2,
'user_id' => 4,
'friend_id' => 1,
),
);
用戶模型
public function friends()
{
return $this->belongsToMany('User', 'friend_user', 'user_id', 'friend_id');
}
這是 Taylor Otwell 在這里建議的:https://github.com/laravel/framework/issues/441
This is as suggested by Taylor Otwell here: https://github.com/laravel/framework/issues/441
這一切都有效,但是當我運行以下命令時,我只得到一個結果:
This all works but when I run the following command I get only one result:
foreach(Auth::user()->friends as $i) {
var_dump($i->id);
}
這將返回值 '3' 但不是預期的 4.我理解為什么會發(fā)生這種情況(因為 user_id 不是friend_id)但是我怎樣才能讓它返回屬于一個用戶的所有朋友(即所有朋友)的集合,而不管連接的哪一端(user_id 或friend_id)用戶是?
This returns the value '3' but not 4 as expected. I understand why this is happening (as the user_id is not the friend_id) but how can I get this to return a collection of all friends belonging to a user (ie all friendships) regardless of which end of the connection (user_id or friend_id) the user is?
推薦答案
使用新函數(shù)代替創(chuàng)建兩條記錄.
Instead of creating two records use a new function.
public function friends()
{
return $this->belongsToMany('User', 'friend_user', 'user_id', 'friend_id');
}
// Same table, self referencing, but change the key order
public function theFriends()
{
return $this->belongsToMany('User', 'friend_user', 'friend_id', 'user_id');
}
//You can then call opposite record(s) using:
foreach( Auth::user()->theFriends as $theFriends )
我在我的項目中使用了這種方法,因此我可以更好地分離組織結果.
I used this approach in my project so I can have better separation for organizing the results.
這篇關于Laravel 多對多自引用表只能以一種方式工作的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!