使用路由模型绑定进行预加载
Eager loading with route model binding
我有这样的控制器功能
public function show(NovelRequest $request, Novel $novel)
{
// load the chapters
$novel->chapters;
// return the detail view of a novel
return view('novels.show', compact('novel'));
}
我收到了一个新对象,因为我正在使用路由模型绑定。但是,我想加载的不仅仅是章节。因为如果我现在做类似
的事情会引起很多请求
$novel->chapters;
$novel->bookmarks;
...
我想知道当我已经有了这个新对象时是否有办法加载 "multiple" 关系。通常我会喜欢
Novel::with('chapters', 'bookmarks')-> ...
但是,我已经有了这个新对象,所以我不想再查找它了。
有“Lazy Eager Loading”。
语法是 $novel->load('chapters', 'bookmarks');
我们可以 eager 通过在模型上定义 resolveRouteBinding
方法来自定义解析逻辑(用于路由模型绑定)来加载所需的关系。
// In the Novel model
public function resolveRouteBinding($value)
{
return $this->with(['chapters', 'bookmarks'])->where($this->getRouteKeyName(), $value)->firstOrFail();
}
我有这样的控制器功能
public function show(NovelRequest $request, Novel $novel)
{
// load the chapters
$novel->chapters;
// return the detail view of a novel
return view('novels.show', compact('novel'));
}
我收到了一个新对象,因为我正在使用路由模型绑定。但是,我想加载的不仅仅是章节。因为如果我现在做类似
的事情会引起很多请求$novel->chapters;
$novel->bookmarks;
...
我想知道当我已经有了这个新对象时是否有办法加载 "multiple" 关系。通常我会喜欢
Novel::with('chapters', 'bookmarks')-> ...
但是,我已经有了这个新对象,所以我不想再查找它了。
有“Lazy Eager Loading”。
语法是 $novel->load('chapters', 'bookmarks');
我们可以 eager 通过在模型上定义 resolveRouteBinding
方法来自定义解析逻辑(用于路由模型绑定)来加载所需的关系。
// In the Novel model
public function resolveRouteBinding($value)
{
return $this->with(['chapters', 'bookmarks'])->where($this->getRouteKeyName(), $value)->firstOrFail();
}