Laravel Pivot - 通过相关模型获得相同的模型

Posted

技术标签:

【中文标题】Laravel Pivot - 通过相关模型获得相同的模型【英文标题】:Laravel Pivot - Getting same model through related model 【发布时间】:2020-05-25 20:08:58 【问题描述】:

我有一个这样的表设置,已经设置了透视关系。

users           colonies       colony_user
.----.-------.  .----.------. .-----------.---------.
| id | name  |  | id | name | | colony_id | user_id |
'----+-------'  '----+------' '-----------+---------+
| 1  | steve |  | 1  | col1 | | 1         | 1       |
| 2  | kate  |  | 2  | col2 | | 1         | 2       |
| 3  | sven  |  '----'------' | 2         | 1       |
'----'-------'                | 2         | 3       |
                              '-----------'---------'
    // User Model
    public function colonies()
    
        return $this->belongsToMany(Colony::class);
    

    // Colony Model
    public function users()
    
        return $this->belongsToMany(User::class);
    

我可以通过雄辩的关系从用户那里获得所有殖民地,反之亦然。 示例:$user->colonies()->get()$colony->users()->get()。 我想获得的是来自我所在的同一个殖民地的其他用户。

提供该表后,如果我是user_id=1,我想同时获得用户23,因为用户2 是我来自殖民地1 的同事,而用户3 来自殖民地@987654331 @。

我在想这样的事情$user->colonies()->users()->where('id', '<>', $user->id)->get(),但无济于事。

希望有人能帮忙,这真是让我头疼:(

抱歉标题令人困惑,不是以英语为母语的人。

【问题讨论】:

【参考方案1】:

您可能需要为您所属的每个群体预先加载用户:

$user->colonies()->with(['users' => function ($q) use ($user) 
    $q->whereKeyNot($user->id);
])->get();

然后您将遍历殖民地并可以访问所有用户。

【讨论】:

感谢您的回答。如果我想对我得到的用户进行分页,它会如何工作? 你在向我扔一个曲线球,你没有在问题中提到分页,哈哈。您只是想要一个唯一的用户列表,还是需要按他们的群体对他们进行分组? @scpn 因为结果是一个集合,你可以使用forPage对集合进行分页 @DigitalDrifter 对此感到抱歉。我实际上不需要将它们分组。只是想让他们分页。虽然这应该对我有用,但我会像 Arun 建议的那样手动进行分页。非常感谢!

以上是关于Laravel Pivot - 通过相关模型获得相同的模型的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 通过属性获得雄辩的查询构建器关系

仅当枢轴属性为空时才通过 manyToMany 计算相关模型 - Laravel

php Laravel雄辩获得最新的相关模型

Laravel 5.5如何获得与模型相关的所有模型?

Laravel 5 更新所有 Pivot 条目

Laravel 多对多合并 Pivot?