Преобразовать вложенный красноречивый запрос в список дочерних элементов - PullRequest
0 голосов
/ 21 апреля 2020

В моем проекте у меня есть 3 модели: снимки, пользователи, команды

Снимок может иметь идентификатор_пользователя. Пользователь может принадлежать нескольким командам. (через сводную таблицу team_user)

Я хочу перечислить все снимки по командам.

Что-то вроде

Команда 1 - Снимок 2 - Снимок 4 - Снимок 9

Команда 2 - Снимок 1 - Снимок 3

Наряду с этим я хочу, чтобы Команды были ограничены теми, кто принадлежит аутентифицированному пользователю.

То есть, если UserA принадлежит командам 3 и Команде 6. Я хотел бы, чтобы выводились только те.

Я могу перечислить снимки, которые связаны с пользователями через этот красноречивый запрос:

Auth::user()->teams()->with(['users.snapshots'])->get();

Это дает мне Команды> Пользователи> Снимки. Как я могу преобразовать это, чтобы я просто получил Team> Snapshots

Я не думаю, что смогу использовать hasManyThrough, потому что я использую сводную таблицу для Команды для пользователей (например, team_user table).

Спасибо

1 Ответ

0 голосов
/ 21 апреля 2020

Мне посоветовали помочь, мои варианты были:

  1. Написать запрос построителя запросов
  2. Использовать пакет
  3. Написать новый метод отношения

Я выбрал вариант 2 и использовал этот пакет: https://github.com/staudenmeir/eloquent-has-many-deep

и добавил в мою команду следующее. php Модель:

public function snapshots()
{
    return $this->hasManyDeep(Snapshot::class, ['team_user', User::class]);
}

Это позволяет устанавливать связи с неограниченными промежуточными моделями (в том числе через сводную таблицу, как работает приведенный выше код).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...