[英]MySQL complex order by Query equivalent in Yii2 Active record
我需要按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中實現這一目標?
您可以使用yii\\db\\Expression
創建自定義order by
子句。 您的要求的查詢將如下所示:
$query->orderBy(new yii\db\Expression("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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.