阅读(742) (9)

Laravel 8 延迟预加载

2021-07-08 09:44:49 更新

有可能你还希望在模型加载完成后在进行渴求式加载。举例来说,如果你想要根据某个条件动态决定是否加载关联数据,那么 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,
    ];
}