articles
表有两个时间戳列:created_at
和published_at
。
published_at
仅在用户希望稍后发布文章时才会使用(如果published_at
不为空并且时间尚未到来,文章将被隐藏)。
我想按时间戳排序文章(显示最新的)。排序依据的时间戳为published_at
,如果它不为空,则使用created_at
。
有雄辩的方法吗?我想将它与其他约束一起使用,我希望将此排序作为范围。
我正在尝试像
这样的东西public function scopeRecent($query)
{
$query->orderBy('ifnull(published_at, created_at)');
}
但MySQL回复Unknown column 'IFNULL(published_at, created_at)'
。
答案 0 :(得分:1)
您必须这样做,因为ifnull
不会处理Illuminate\Database\Query\Builder
:
public function scopeRecent($query)
{
$query->orderByRaw('ifnull(published_at, created_at)');
}
答案 1 :(得分:1)
如果有人使用Postgres,那就像是:
public function scopeRecent($query){
$query->orderByRaw('COALESCE(published_at, created_at)');
}