2015-05-09 39 views
3

與條件一對多的關係我有一個members表是這樣的:Laravel ORM許多對鍵

------------------ 
| id | name | ... 
------------------ 
    1 John 
    2 Jane 
    3 Bill 

relations表來存儲他們的關係。

---------------------------- 
| from_id | to_id | status | 
---------------------------- 
    1   2  friend 
    2   3  friend 

第一條記錄說:會員#1和會員#2是朋友。 member#1 is friend with #2member#2 is friend with #1

在Laravel,我怎麼能得到一個會員的所有朋友的關係?
我需要檢查兩列from_idto_id,並在我的Member模型中使用此語法我無法得到它。

會員型號

public function friends(){ 
    return $this->belongsToMany('Member', 'relations', 'from_id', 'to_id'); 
} 

是member_id這只是返回記錄是from_id

我想有這個疑問,如果會員= 1

SELECT * FROM relations WHERE from_id = 1 OR to_id = 1 

任何幫幫我?

謝謝。

回答

1

嗯,這不是我使用Laravel ORM的問題的正確答案,但是我使用它併產生了相同的結果。我希望如果別人知道在這裏分享我們的正確答案。謝謝。

Member模型定義這個方法:

return Member::join('relations', function($join) use($limit) { 
      $join->on('relations.from_id', '=', 'members.id') 
       ->orOn('relations.to_id', '=', 'members.id'); 
     }) 
     ->where(function($where){ 
      $where->where('relations.from_id', '=', $this->id) 
       ->orWhere('relations.to_id', '=', $this->id); 
     }) 
     ->where('members.id', '!=', $this->id) 
     ->groupBy('members.id') 
     ->get(); 

所以我可以使用:

$member = Member::find(1); // for example user#1 
$member->friends(); // a list of eloquent objects of members.