簡體   English   中英

YII2:搜索中的自定義排序 model

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM