【问题标题】:Laravel ORM many to many relation with conditions on keysLaravel ORM 与键条件的多对多关系
【发布时间】:2015-07-20 04:26:22
【问题描述】:

我有一个像这样的members 表:

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

还有一个relations 表来存储他们的关系。

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

第一条记录说:member#1 和 member#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

有什么帮助吗?

谢谢。

【问题讨论】:

    标签: php laravel laravel-4 eloquent relationship


    【解决方案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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 2019-06-18
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2012-10-27
      • 2017-06-21
      相关资源
      最近更新 更多