我正在我使用Laravel雄辩来从我的数据库我所有的数据,其中一个项目。
我存储篮球俱乐部,球队和球员在不同的表。现在,我要选择属于该属于俱乐部一队所有篮球运动员。
我创造了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();
但是,当我不使用关系执行下面的命令,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(...)
在加入查询)。
是否有可能获得相同的结果就像“长”手册使用更清洁和更简单的雄辩关系的方式加入查询?
谢谢你的帮助!
您可以使用此with
(不是所有用户列为例)读取数据较少
Club::findOrFail($club_id)
->basketballPlayers()
->with('user:id,firstname,lastname') // <- here is change
->get();
该id
(和外键)列是很重要的。你应该也能够使嵌套with
以下列方式(我写的,从头部代码 - 所以请测试它):
Club::findOrFail($club_id)
->with('BasketballPlayer:id,user_id')
->with('BasketballPlayer.user:id,firstname,lastname')
->get();