2014-06-29 52 views
0

我創建了模型,以便用戶可以成爲朋友。我有表user_friends存儲user_id和friend_id。問題是,它只能單向工作。如果用戶1將用戶2添加爲朋友,則用戶2將是用戶1的朋友,但不是相反的(用戶2的用戶1朋友)我該如何完成這樣的事情?Laravel用戶之間的友誼4

用戶模型

public function friends() 
{ 
    return $this->belongsToMany('User','user_friends','user_id','friend_id'); 
} 

和User_Friend模型

public function user() 
{ 
    return $this->belongsToMany('User'); 
} 

找朋友

$friends = User::find($user->id)->friends; 

和控制器的一部分,我保存新的友誼

$friendData = array('user_id' => $invite->id,); //$invite is result of $invite->save() 
     $friend = User::find($user->id)->friends()->attach($friendData); 
+1

我不熟悉有問題的框架,但你可以做一些像......'SELECT friend_id FROM user_friends WHERE user_id =? UNION SELECT user_id FROM user_friends WHERE friend_id =?'。這應該給你一個所有朋友的名單,不管鏈接的方式如何。 – Basic

+0

這是一個解決方案。但是Laravel和Eloquent正在使用不同的方法。對不起,我不能接受你的回答。 – SuperManSL

+0

不是問題,我知道這不是你所追求的解決方案,這就是爲什麼它不僅僅是評論的答案。 – Basic

回答

1

你可以做的一件事是存儲和反向關係。

$friendData = ['user_id' => $invite->id]; 

$user = User::find($user->id); 
$user->friends()->attach($friendData); 

$friend = User::find($invite->id); 
$friend->friends()->attach($user); 

否則,您可以查找反向關係

public function reverseFriends() 
{ 
    return $this->hasManyThrough('User', 'User_Friend', 'friend_id', 'user_id'); 
} 

,然後合併這兩個集合。