我有一个members
表,如下所示:
------------------
| 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 #2
和member#2 is friend with #1
。
在Laravel中,我如何才能获得成员的所有朋友?
我需要检查列from_id
和to_id
,并且在Member
模型中使用此语法我无法获得它。
会员模型
public function friends(){
return $this->belongsToMany('Member', 'relations', 'from_id', 'to_id' );
}
这只会返回member_id为from_id
我想要这个查询,如果member = 1
SELECT * FROM relations WHERE from_id = 1 OR to_id = 1
任何帮助?
感谢。
答案 0 :(得分: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.