[英]Laravel Eloquent - Combining queries to single one using relations
我正在一个项目中,我正在使用Laravel Eloquent从数据库中获取所有数据。
我将篮球俱乐部,球队和球员存放在不同的桌子中。 现在,我要选择属于某个俱乐部的所有篮球运动员。
我在Club
模型中创建了一个关系:
public function basketballPlayers()
{
return $this->hasManyThrough('App\Models\Basketball\BasketballPlayer','App\Models\Basketball\BasketballTeam','id','team_id');
}
还有BasketballPlayer
模型中的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']);
我不需要俱乐部和用户的所有数据(请参阅Join查询中的->get(...)
)。
是否可以使用更简洁,更易懂的口才关系方法来实现与“长篇”手动Join-query中相同的结果?
谢谢你的帮助!
您可以使用with
(并非所有用户列作为示例) 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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.