Laravel ORM与键上的条件有许多关系

时间:2015-05-09 08:14:17

标签: php laravel laravel-4 eloquent relationship

我有一个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 #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

的记录

我想要这个查询,如果member = 1

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

任何帮助?

感谢。

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.