сортировка по умолчанию поставщика данных yii2


В yii этот код работает для сортировки по умолчанию:

$dataProvider = new CActiveDataProvider('article',array(
        'sort'=>array(
            'defaultOrder'=>'id DESC',
        ),

Как можно установить сортировку по умолчанию в yii2?

Попробовал код ниже, но безрезультатно:

$dataProvider = new ActiveDataProvider([
        'query' => $query,
        'sort' => ['defaultOrder'=>'topic_order asc']
    ]);
Author: zishe, 2014-04-10

5 answers

Я думаю, что есть правильное решение

 $dataProvider = new ActiveDataProvider([
     'query' => $query,
     'sort'=> ['defaultOrder' => ['topic_order'=>SORT_ASC]]
 ]);

Официальная ссылка на документ

 131
Author: Alex, 2015-03-30 08:09:37

Или

       $dataProvider->setSort([
        'defaultOrder' => ['topic_order'=>SORT_DESC],
        'attributes' => [...
 31
Author: Kristīne Glode, 2015-02-27 13:47:12

Defaultorder содержит массив, где ключ - это имя столбца, а значение - SORT_DESC или SORT_ASC, поэтому приведенный ниже код не работает.

$dataProvider = new ActiveDataProvider([
        'query' => $query,
        'sort' => ['defaultOrder'=>'topic_order asc']
    ]);

Правильный Путь

$dataProvider = new ActiveDataProvider([
    'query' => $query,
    'sort' => [
        'defaultOrder' => [
            'topic_order' => SORT_ASC,
        ]
    ],
]);

Примечание: Если в запросе уже указано предложение OrderBy, новые инструкции по заказу, данные конечными пользователями (через конфигурацию сортировки), будут добавлены к существующему предложению OrderBy. Любые существующие предложения об ограничении и смещении будут перезаписаны запросом на разбиение на страницы от конечных пользователей (через конфигурация разбиения на страницы).

Вы можете подробно узнать у Yii2 Руководство поставщика данных

Сортировка Путем передачи объекта сортировки в запросе

 $sort = new Sort([
        'attributes' => [
            'age',
            'name' => [
                'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC],
                'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC],
                'default' => SORT_DESC,
                'label' => 'Name',
            ],
        ],
    ]);

    $models = Article::find()
        ->where(['status' => 1])
        ->orderBy($sort->orders)
        ->all();
 6
Author: Parth Chavda, 2016-05-17 13:23:32

Попробуйте это

$dataProvider = new ActiveDataProvider([
    'query' => $query,
]);

$sort = $dataProvider->getSort();

$sort->defaultOrder = ['id' => SORT_ASC];

$dataProvider->setSort($sort);
 1
Author: user210195, 2018-06-07 11:04:09

Вы можете изменить модель поиска следующим образом

$dataProvider = new ActiveDataProvider([
        'query' => $query,
        'sort' => [
            'defaultOrder' => ['user_id =5 asc, document_id asc']
        ]
    ]);
 -1
Author: brahmeswara rao Kamineni, 2017-11-25 10:50:15