首页 > 解决方案 > Laravel Pivot - 通过相关模型获得相同的模型

问题描述

我有一个这样的表设置,其中已经设置了枢轴关系。

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,我想同时获得 user 23因为 user2是我来自 Colony 的同事和来自 Colony的1user 。32

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

希望任何人都可以提供帮助,这真的让我很头疼:(

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

标签: phplaraveleloquentpivotrelationship

解决方案


您可能需要为您所属的每个殖民地急切加载用户:

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

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


推荐阅读