【发布时间】:2020-01-25 19:24:02
【问题描述】:
我将我的问题编辑得更明确
我需要建立一个过滤 hasMany 关系的范围。问题是,我想将该查询应用于 last 项 ONLY,我的意思是,我希望我的模型由 HasMany 关系的特定记录的列过滤,是有可能吗?
上下文:一个有帖子的应用程序,每个帖子都有许多状态来保持历史。我想按每个帖子的最后状态过滤帖子。
帖子:
{
public function statuses()
{
return $this->hasMany(Status::class); // Only last one is important for querying
}
}
然后,在一个范围内,我想做这样的事情:
public function scopeIsActive(Builder $builder)
{
return $builder->whereHas('statuses', function(Builder $q) {
// How to apply this ONLY to last created record???
return $q->whereDate('activation', '<=', today());
});
}
仅此而已!
编辑:(已解决的查询)
经过一番挖掘,我解决了这个问题:
public function scopeIsActive(Builder $builder)
{
return $builder->whereHas('statuses', function (Builder $q) {
return $q->whereDate('activation', '<=', today()) // applies to all
->where('statuses.id', function ($sub) { // applies to specific one
return $sub->select('id')
->from('statuses')
->whereColumn('post_id', 'statuses.id')
->latest()
->limit(1);
});
});
}
【问题讨论】:
标签: mysql laravel eloquent relationship has-many