laravel hasManyThrough, команды, игры, пивот, как получить соперников? - PullRequest
0 голосов
/ 07 октября 2019

Я изо всех сил пытаюсь достичь чего-то здесь.

У меня есть 3 таблицы: команды, игры и сводная таблица game_team. Команды могут встречаться друг с другом несколько раз.

Каждая игра имеет две строки в сводной таблице game_team, каждая из этих двух строк имеет одинаковый game_id и разные идентификаторы team_id

Я пытаюсь создатьновая виртуальная модель под названием «соперник» (виртуальная, поскольку она расширяет модель команды и не имеет собственных таблиц)

Соперники - это уникальные команды, с которыми одна команда столкнулась в игре

Если бы я делал это вручную, я бы получил все игры, принадлежащие команде. Затем я получал бы сводные строки для каждого game_id, исключая те, которые имеют тот же team_id, что и команда, к которой я обращаюсь, и я бы добавил отдельное предложение, чтобы я только уникальные team_ids

Как это можно написатьс eloquent, чтобы он одновременно загружал соперников?

Цените помощь! Спасибо

Пока у меня есть этот метод на моей модели команды. Хотелось бы узнать, есть ли более эффективный способ добиться этого

    public function getRivals()
    {
        $games = $this->relationLoaded('games') ? $this->games : $this->games();

        $gameIds = $games->pluck('id');
        $rivalIds = PivotTeamGame::whereIn('game_id', $gameIds)->where('team_id', '<>', $this->id)->groupBy('team_id')->get(['team_id'])->pluck('team_id');
        return Team::whereIn('id', $rivalIds)->get([
            'id',
            'name',
            'slug',
        ]);
    }
...