当我创建一个CRUD控制器时,这是默认创建的表演路线:
/**
* Display the specified resource.
*
* @param \App\Team $team
* @return \Illuminate\Http\Response
*/
public function show(Team $team)
{
//
}
$team
是此处的对象,是Team
的实例。如果这样做,我会将正确的对象传递给刀片服务器:
public function show(Team $team)
{
return view('admin.teams.show', ['team' => $team]);
}
但是,Team
与另一个称为Player
的模型具有多对多关系,并且这种关系是从Team
端定义的:
public function players() {
return $this->belongsToMany(Player::class);
}
在我的show方法中,我想将$ team及其相关的玩家退还给我们。但是由于$ team已经是一个对象而不是查询生成器,所以现在做类似的事情已经太晚了
$team->with('players')
那么我该如何吸引相关玩家?我知道我可以做类似的事情:
public function show(Team $team)
{
$team_extended = Team::where('id', $team['id'])->with('players')->first();
return view('admin.teams.show', ['team' => $team_extended]);
}
但是感觉就像在破解默认情况下应该存在的功能。是否有内置的Laravel方法可以做到这一点?还是我只是在发明热水,并应该采用上面在我的解决方案中使用的方法?
答案 0 :(得分:1)
如果您已经加载了Team
模型,则可以加载关系,而不必使用->load()
方法完全重新创建它:
public function show(Team $team){
$team->load("players");
return view("admin.teams.show", ["team" => $team]);
}
但是请注意,除非您需要修改$team->players
的默认内容,否则这不是必需的。当您尝试在$team->players
视图中访问admin.teams.show
时,如果该属性尚不存在(如使用->with(["players"])
或->load("players")
的方式,Laravel将自动加载该属性