Я изо всех сил пытаюсь достичь чего-то здесь.
У меня есть 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',
]);
}