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 #2member#2 is friend with #1.

在Laravel中,我怎样才能拥有一个成员的所有朋友的关系?
我需要检查 from_idto_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.