MySQL复杂顺序按YII2活动记录中的查询等效



我需要通过 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

最新更新