[英]YII2: custom sorting in search model
請幫我解決這樣的問題:
1) 我有默認搜索 model 的用戶。
2)我需要一個用戶列表。 此列表中的第一個必須是登錄為“ admin ”的用戶,第二個是登錄為“ finance ”的用戶,然后是所有其他按 id 排序的用戶。
我在 UserController 中的方法
public function actionUsersList() {
$searchModel = new UserSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->renderPartial('users-list', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
據我了解,我必須在這一行中更改搜索參數,以添加排序條件
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
但是我到底該怎么做呢?
您可以通過將以下代碼添加到您的操作中來做到這一點:
$dataProvider->sort->attributes['id'] = [
'asc' => [
new \yii\db\Expression("FIELD(login, 'finance', 'admin') DESC"),
'id' => SORT_ASC,
],
'desc' => [
new \yii\db\Expression("FIELD(login, 'finance', 'admin') DESC"),
'id' => SORT_DESC,
],
'label' => $searchModel->getAttributeLabel('id'),
];
$dataProvider->sort->defaultOrder = ['id' => SORT_ASC];
字段 function 返回其他參數中第一個參數的 position,如果其中不存在該值,則返回 0。 因此,對於“admin”,它將返回 2,對於“finance”,它會返回 1,而對於其他人,它將返回 0。如果您通過該命令訂購 DESC,您將獲得所需的訂單。
其他選項是將此定義添加到 UserSearch model 的搜索方法中,如mahsaa 的回答中所建議的那樣。 如果您想在不同的操作中使用這種排序,這取決於您。
在UserSearch
class 中,將sort
添加到 ActiveDataProvider:
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => [
'defaultOrder' => [
'login' => SORT_ASC,
'id' => SORT_DESC,
],
]]);
它首先按登錄名排序,然后按 id 排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.