Я работаю над проектом, в котором я использую Laravel Eloquent для извлечения всех моих данных из моей базы данных.
Я храню баскетбольные клубы, команды и игроков за разными столами.Теперь я хочу выбрать всех баскетболистов, принадлежащих к команде, принадлежащей клубу.
Я создал отношение в модели Club
:
public function basketballPlayers()
{
return $this->hasManyThrough('App\Models\Basketball\BasketballPlayer','App\Models\Basketball\BasketballTeam','id','team_id');
}
И user
отношение в модели BasketballPlayer
:
public function user()
{
return $this->hasOne('App\User','id','user_id');
}
Теперь, когда я выполняю следующую команду, DB::getQueryLog()
возвращает 3 запроса.
Club::findOrFail($club_id)->basketballPlayers()->with('user')->get();
Но когда я выполняю следующую команду без использованияRelations, DB::getQueryLog()
возвращает только 1 запрос.
$players = BasketballPlayer::Join('basketball_teams','basketball_teams.id','=','basketball_players.team_id')
->join('users','users.id','=','basketball_players.user_id')
->where('basketball_teams.club_id','=',$authUser->club_id)
->get(['basketball_players.*','users.firstname','users.lastname','basketball_teams.name']);
Мне не нужны все данные от клуба и пользователя (см. ->get(...)
в запросе на присоединение).
Можно ли достичь того же результата, что и в «длинном» ручном соединительном запросе, используя гораздо более понятный и простой подход Eloquent для отношений?
Спасибо за вашу помощь!