Laravel 5 如果在Eloquent中存在列(否则使用另一列),如何按列排序?

Laravel 5 如果在Eloquent中存在列(否则使用另一列),如何按列排序?,laravel-5,eloquent,Laravel 5,Eloquent,文章表有两个时间戳列:在处创建和在处发布 仅当用户希望在以后发布文章时才使用位于的published_(如果published_at不为空且时间尚未到来,则文章将隐藏) 我想按时间戳对文章进行排序(以显示最近的文章)。排序依据的时间戳为published\u at,如果不为空,则使用created\u at 有没有一种雄辩的方法可以做到这一点?我希望将其与其他约束一起使用,更希望将此排序作为范围 我正在尝试类似的东西 public function scopeRecent($query) {

文章表
有两个时间戳列:
处创建和
处发布

仅当用户希望在以后发布文章时才使用位于的
published_(如果
published_at
不为空且时间尚未到来,则文章将隐藏)

我想按时间戳对文章进行排序(以显示最近的文章)。排序依据的时间戳为
published\u at
,如果不为空,则使用
created\u at

有没有一种雄辩的方法可以做到这一点?我希望将其与其他约束一起使用,更希望将此排序作为范围

我正在尝试类似的东西

public function scopeRecent($query)
{
    $query->orderBy('ifnull(published_at, created_at)');
}

但是MySQL使用
Unknown列'IFNULL(published\u at,created\u at)

进行回复,您必须这样做,因为
IFNULL
不是由
illumb\Database\Query\Builder处理的:

public function scopeRecent($query)
{
    $query->orderByRaw('ifnull(published_at, created_at)');
}

如果有人正在使用Postgres,则可能是:

public function scopeRecent($query){
    $query->orderByRaw('COALESCE(published_at, created_at)');
}

你是在寻找一个基于雄辩的解决方案吗?@Wistar我更喜欢雄辩的解决方案,因为我想将它用于雄辩的查询。但请随意发布其他解决方案——如果我没有找到一个雄辩的解决方案,我可能需要它。