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();