articles
表有两个时间戳列:created_at
和published_at
。
只有当用户希望稍后发布文章时才使用published_at
(如果published_at
不是null且时间尚未到来,则文章是隐藏的)。
我想按时间戳对文章进行排序(显示最近的)。要排序的时间戳是published_at
,如果它不是null,则使用created_at
。
有什么能言善辩的方法吗?我想把它和其他约束一起使用,我更愿意把这个顺序作为范围。
我正在尝试这样的方法
public function scopeRecent($query)
{
$query->orderBy('ifnull(published_at, created_at)');
}
但MySQL的回复是Unknown column 'IFNULL(published_at, created_at)'
。
发布于 2016-02-12 00:03:23
您必须这样做,因为ifnull
不是由Illuminate\Database\Query\Builder
处理的
public function scopeRecent($query)
{
$query->orderByRaw('ifnull(published_at, created_at)');
}
发布于 2017-10-05 19:49:42
如果有人在使用Postgres,就像:
public function scopeRecent($query){
$query->orderByRaw('COALESCE(published_at, created_at)');
}
https://stackoverflow.com/questions/35352204
复制相似问题