我需要通过 status
字段订购表数据,但我也想先显示一些行,它们具有一定的 status
。
目前,我可以使用MySQL这样实现此目标:
SELECT status FROM item
ORDER BY status NOT LIKE '%order-status%', status
因此,所有项目具有order-status
订单状态将首先显示,然后按状态订购。
,但我无法在YII2主动记录中实现这一目标。我试图写类似:
$query->orderBy(['not like', 'item.status', 'order-status']);
$query->orderBy(['item.status' => SORT_ASC]);
但这是不正确的。有什么方法可以在主动记录中实现这一目标?
您可以使用yiidbExpression
创建自定义order by
子句。您需要的查询将是这样:
$query->orderBy(new yiidbExpression("status NOT LIKE '%order-status%', status"))
Expression
实例中传递的此参数将直接由yii 2查询构建器使用。有关更多详细信息,您可以阅读Expression
文档。
您可以在orderBy
中使用字符串,例如:
$query->orderBy("status NOT LIKE '%order-status%', status");
或
$query->orderBy("status NOT LIKE '%order-status%'")
->addOrderBy('status');
有用的链接:DB- Query-Builder