Laravel Pivot - Получение той же модели через связанную модель - PullRequest
1 голос
/ 10 февраля 2020

У меня есть таблица установки, подобная этой, с уже установленным отношением поворота.

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, я хочу получить пользователей 2 и 3, потому что пользователь 2 мой коллега из колонии 1 и пользователь 3 из колонии 2.

Я думал что-то вроде $user->colonies()->users()->where('id', '<>', $user->id)->get(), но безрезультатно.

Надеюсь кто-нибудь может помочь, это действительно вызывает у меня головную боль: (

Извините за запутанный заголовок, но не носитель английского языка sh.

1 Ответ

0 голосов
/ 10 февраля 2020

Вам может потребоваться загрузить пользователей для каждой колонии, в которую вы входите:

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

Тогда вы переместитесь на oop по колониям и получите доступ ко всем пользователям.

...