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'],
]);