我的模型看起来像:
protected $appends = array('status');
public function getStatusAttribute()
{
if ($this->someattribute == 1) {
$status = 'Active';
} elseif ($this->someattribute == 2) {
$status = 'Canceled';
...
} else {
$status = 'Some antoher status';
}
return $status;
}
我想通过此status
属性订购此模型的集合,是否可能?
Model::where(...)->orderBy(???)
P.S。我需要完全orderBy
,而不是sortBy
解决方案。
答案 0 :(得分:0)
你可以使用
Model::where(...)->orderBy('someattribute')->get();
在这种情况下,您只能使用整数值代替someattribute
,或者您可以使用DB
查询
DB::select(DB::raw('(CASE WHEN someattribute = 1 THEN "Active" CASE WHEN someattribute = 1 THEN "Canceled" ELSE "Some antoher status" END) AS status'))
->orderBy('someattribute', 'desc');
答案 1 :(得分:0)
没有办法使Eloquent这样做,因为它仅创建一个SQL查询。它无法将代码中的PHP逻辑转换为SQL查询。
一种解决方法是在以后遍历结果并手动检查附加字段。在这里收藏可能会有用。