我需要按status
字段对表数据进行排序,但我想先显示一些具有特定status
的行。
目前,我可以使用MySQL这样实现:
SELECT status FROM item
ORDER BY status NOT LIKE '%order-status%', status
因此,所有具有order-status
订单状态的商品都将首先显示,然后按状态显示其他订单。
但是我无法在Yii2 Active Record中实现这一目标。我试图写类似的东西:
$query->orderBy(['not like', 'item.status', 'order-status']);
$query->orderBy(['item.status' => SORT_ASC]);
但这是不正确的。有什么方法可以在Active Record中实现?
答案 0 :(得分:3)
您可以使用yii\db\Expression
创建自定义order by
子句。您的需求查询将是这样的:
$query->orderBy(new yii\db\Expression("status NOT LIKE '%order-status%', status"))
在Expression
实例中传递的此参数将由Yii 2查询构建器直接使用。有关更多详细信息,请阅读Expression
documentation。
答案 1 :(得分:0)
您可以在orderBy
中使用字符串,如下所示:
$query->orderBy("status NOT LIKE '%order-status%', status");
或
$query->orderBy("status NOT LIKE '%order-status%'")
->addOrderBy('status');
有用的链接:db-query-builder