急切加载路由模型绑定

Fra*_*ost 5 eager-loading laravel eloquent

我有这样的控制器功能

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'));
}
Run Code Online (Sandbox Code Playgroud)

我收到一个新的对象,因为我使用路由模型绑定.但是,我想加载的不仅仅是章节.因为如果我现在做类似的事情会引起很多请求

$novel->chapters;
$novel->bookmarks;
...
Run Code Online (Sandbox Code Playgroud)

当我已经拥有这个小说的对象时,我想知道是否有一种加载"多重"关系的方法.通常我会喜欢

Novel::with('chapters', 'bookmarks')-> ...
Run Code Online (Sandbox Code Playgroud)

但是,我已经有了这个新颖的物体,所以我不想第二次看.

Gor*_*man 19

有" 懒惰的渴望加载 ".语法是$novel->load('chapters', 'bookmarks');


小智 6

我们可以通过在模型上定义方法来自定义解析逻辑(用于路由模型绑定)来急切地加载所需的关系。resolveRouteBinding

// In the Novel model
public function resolveRouteBinding($value)
{
    return $this->with(['chapters', 'bookmarks'])->where($this->getRouteKeyName(), $value)->firstOrFail();
}
Run Code Online (Sandbox Code Playgroud)

https://laravel.com/docs/6.x/routing#explicit-binding