Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting Yii2高级分拣_Sorting_Yii2 - Fatal编程技术网

Sorting Yii2高级分拣

Sorting Yii2高级分拣,sorting,yii2,Sorting,Yii2,如何在Yii2中实现以下排序: SELECT * FROM `orders` order by case when status != 'ORDER_DONE' then 1 else 2 end,status 我想把订单完成的状态放到底部。有什么想法吗?从2.0.7开始,您可以将yii\db\Expression传递到orderBy()这样做: (new \yii\db\Query) ->from('orders') ->orderBy(new \yii\db\Expressio

如何在Yii2中实现以下排序:

SELECT * FROM `orders` order by case when status != 'ORDER_DONE' then 1 else 2 end,status

我想把订单完成的状态放到底部。有什么想法吗?

从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')],
        ],
    ],
]

谢谢该解决方案是否可以在排序属性中使用?”sort'=>['attributes'=>['onlinedate'=>['asc'=>['onlinedate'=>sort\u asc],//需要将类型ORDER\u DONE的状态置于底部'desc'=>['onlinedate'=>sort\u desc],//需要将类型ORDER\u DONE的状态置于顶部',,],我得到以下错误:错误信息:数组([S20]=>422[1]=>1054[2]=>未知列“order子句”中的“表达式”)对不起,忘记了数组。