Laravel 8 嵌套延迟预加载 & morphTo
如果希望快速加载 morphTo
关系,以及该关系可能返回的各种实体上的嵌套关系,可以使用 loadMorph
方法。
这个方法接受 morphTo
关系的名称作为它的第一个参数,第二个参数接收模型数组、关系数组。为了帮助说明这个方法,可以看一下以下模型例子:
<?php
use Illuminate\Database\Eloquent\Model;
class ActivityFeed extends Model
{
/**
* 获取 activity feed 记录的父级
*/
public function parentable()
{
return $this->morphTo();
}
}
在这个例子中,让我们假设 Event
、Photo
和 Post
模型可以创建 ActivityFeed
模型。此外,让我们假设 Event
模型属于 Calendar
模型,Photo
模型与 Tag
模型相关联,Post
模型属于 Author
模型。
使用这些模型定义和关系,我们可以检索 ActivityFeed
模型实例,并立即加载所有 parentable
模型及其各自的嵌套关系:
$activities = ActivityFeed::with('parentable')
->get()
->loadMorph('parentable', [
Event::class => ['calendar'],
Photo::class => ['tags'],
Post::class => ['author'],
]);