[英]Yii2 advanced sorting
如何在Yii2中實現以下排序:
SELECT * FROM `orders` order by case when status != 'ORDER_DONE' then 1 else 2 end,status
我想將ORDER_DONE的狀態放到底部。 任何想法?
從2.0.7版本開始,您可以將yii\\db\\Expression
傳遞給orderBy()
所以可以這樣:
(new \yii\db\Query)
->from('orders')
->orderBy(new \yii\db\Expression('CASE WHEN status != "ORDER_DONE" THEN 1 ELSE 2 END, status'))
->all();
要對數據提供者進行排序,請使用:
'sort' => [
'attributes' => [
'onlinedate' => [
'asc' => [new \yii\db\Expression('CASE WHEN status != "ORDER_DONE" THEN 1 ELSE 2 END, status')],
'desc' => [new \yii\db\Expression('CASE WHEN status = "ORDER_DONE" THEN 1 ELSE 2 END, status')],
],
],
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.