Laravel 8 延迟预加载
有可能你还希望在模型加载完成后在进行渴求式加载。举例来说,如果你想要根据某个条件动态决定是否加载关联数据,那么 load
方法对你来说会非常有用:
$books = App\Models\Book::all();
if ($someCondition) {
$books->load('author', 'publisher');
}
如果你想要在渴求式加载的查询语句中进行条件约束,你可以通过数组的形式去加载,键为对应的关联关系,值为 Closure
闭包函数,该闭包的参数为一个查询实例:
$author->load(['books' => function ($query) {
$query->orderBy('published_date', 'asc');
}]);
如果希望加载还没有加载的关联关系时,你可以使用 loadMissing 方法:
public function format(Book $book)
{
$book->loadMissing('author');
return [
'name' => $book->name,
'author' => $book->author->name,
];
}