我有一个项目的出版日期模型时间表,例如电影:电影可以被调度0次或更多次。
我想知道:1)下一个时间表是什么时候,或者如果没有下一个时间表2)最后一次安排电影是什么时候?
对于电影,我有这样的关系:
public function lastScheduleEvent(): HasOne
{
return $this->scheduleEvents()->one()->ofMany('starts_at','max');
}
public function nextScheduleEvent(): HasOne
{
return $this->scheduleEvents()->one()->ofMany([
'starts_at' => 'max'
], function (Builder $query) {
$query->where('starts_at','>',now());
}
);
}
和一个属性来获取上一个或下一个计划:
protected function nextOrLastScheduleEvent(): Attribute
{
return Attribute::make(
get: fn ($value) => $this->nextScheduleEvent ?? $this->lastScheduleEvent
);
}
我可以创建one()->ofMany(...)
关系(而不是属性)来获取nextOrLastScheduleEvent
吗?
即,是否存在可以与最小/最大聚合器一起使用以获得下一个或最后一个调度事件的查询?
1条答案
按热度按时间63lcw9qa1#
可以,您可以创建一个关系来获取下一个或最后一个计划事件。您可以使用自定义SQL表达式和one()-〉ofMany(...)关系。
此代码将首先检查事件是在未来还是在过去。它将优先考虑未来事件。如果没有未来事件,则将选择最近的过去事件。这样,您可以在一个关系中获得下一个或最后一个计划事件。