如果在Eloquent中存在(如果它存在(或者使用另一列),如何命令列?

时间:2016-02-11 23:35:52

标签: laravel-5 eloquent

articles表有两个时间戳列:created_atpublished_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)'

2 个答案:

答案 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)');
}