Laravel ORM 与键条件的多对多关系
Laravel ORM many to many relation with conditions on keys
我有一个 members
table 这样的:
------------------
| id | name | ...
------------------
1 John
2 Jane
3 Bill
和一个 relations
table 来存储他们的关系。
----------------------------
| 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' );
}
这只returns记录member_id是from_id
我想要这个查询,if member = 1
SELECT * FROM relations WHERE from_id = 1 OR to_id = 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.
我有一个 members
table 这样的:
------------------
| id | name | ...
------------------
1 John
2 Jane
3 Bill
和一个 relations
table 来存储他们的关系。
----------------------------
| 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' );
}
这只returns记录member_id是from_id
我想要这个查询,if member = 1
SELECT * FROM relations WHERE from_id = 1 OR to_id = 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.