【发布时间】:2019-06-29 16:52:50
【问题描述】:
我正在做一个项目,我正在使用 Laravel Eloquent 从我的数据库中获取我的所有数据。
我将篮球俱乐部、球队和球员存放在不同的桌子上。 现在我想选择属于某个俱乐部的球队的所有篮球运动员。
我在Club 模型中创建了一个关系:
public function basketballPlayers()
{
return $this->hasManyThrough('App\Models\Basketball\BasketballPlayer','App\Models\Basketball\BasketballTeam','id','team_id');
}
user 模型中的 user 关系:
public function user()
{
return $this->hasOne('App\User','id','user_id');
}
现在当我执行以下命令时,DB::getQueryLog() 返回 3 个查询。
Club::findOrFail($club_id)->basketballPlayers()->with('user')->get();
但是当我在不使用关系的情况下执行以下命令时,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 关系方法获得与“长”手动联接查询相同的结果?
感谢您的帮助!
【问题讨论】: