我可能在这里使用了错误的术语,对此我提前表示歉意!
我有一个现有的数据库表,看起来像..
活动:
id | 类型 | 标题 | 日期 |
---|---|---|---|
1 | 派对 | 夏日派对 | 2023-08-01 |
2 | 假期 | 圣诞节 | 2023-12-25 |
我有一个名为
Event
的父 Eloquent 模型,然后是 Holiday
和 Party
。
每个子模型都会扩展
Event
并应用一个范围,例如
static::addGlobalScope('type', function (Builder $builder) {
$builder->where('type', 'PARTY');
});
这样我们就可以执行
Holiday::all()
和 Party::all()
,我们将获得过滤结果作为预期的 Party
或 Holiday
模型/类的集合。
每个子模型都有其独特的功能,例如
$party->dance()
用户可以参加可通过调用
$user->events
检索的事件,这只是一个 HasMany:
public function events(): HasMany
{
return $this->hasMany(Event::class);
}
但是,当我们调用
$user->events
时,因为 HasMany 返回事件模型,我们会丢失每个模型上的 OOP 内容。
有没有办法在模型根据类型返回时对其进行变形?因此,我们不是得到
Event
的集合,而是在集合中得到 Party
和 Holiday
模型?
谢谢
您可以像下面这样修改您的关系
public function events(): HasMany
{
return $this->hasMany(Event::class)->where('type', 'PARTY');
}