Laravel 8 嵌套预加载 morphTo 关联
如果你希望加载一个 morphTo
关系,以及该关系可能返回的各种实体的嵌套关系,可以将 with
方法与 morphTo
关系的 morphWith
方法结合使用。 为了帮助说明这种方法,让我们参考以下模型:
<?php
use Illuminate\Database\Eloquent\Model;
class ActivityFeed extends Model
{
/**
* 获取活动提要记录的父级
*/
public function parentable()
{
return $this->morphTo();
}
}
在这个例子中,我们假设 Event
,Photo
和 Post
模型可以创建 ActivityFeed
模型。 另外,我们假设 Event
模型属于 Calendar
模型,Photo
模型与 Tag
模型相关联,Post
模型属于 Author
模型。
使用这些模型定义和关联,我们可以查询 ActivityFeed
模型实例并预加载所有 parentable
模型及其各自的嵌套关系:
use Illuminate\Database\Eloquent\Relations\MorphTo;
$activities = ActivityFeed::query()
->with(['parentable' => function (MorphTo $morphTo) {
$morphTo->morphWith([
Event::class => ['calendar'],
Photo::class => ['tags'],
Post::class => ['author'],
]);
}])->get();