使用路径模型绑定进行预先加载

时间:2016-11-03 15:57:58

标签: laravel eloquent eager-loading

我有一个像这样的控制器功能

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;
...

我想知道是否有办法加载"多个"我已经拥有这个小说的对象。通常我会喜欢

Novel::with('chapters', 'bookmarks')-> ...

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

2 个答案:

答案 0 :(得分:17)

有“Lazy Eager Loading”。 语法为$novel->load('chapters', 'bookmarks');

答案 1 :(得分:0)

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

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

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