сортировка по умолчанию поставщика данных yii2
В yii этот код работает для сортировки по умолчанию:
$dataProvider = new CActiveDataProvider('article',array(
'sort'=>array(
'defaultOrder'=>'id DESC',
),
Как можно установить сортировку по умолчанию в yii2?
Попробовал код ниже, но безрезультатно:
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder'=>'topic_order asc']
]);
5 answers
Я думаю, что есть правильное решение
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort'=> ['defaultOrder' => ['topic_order'=>SORT_ASC]]
]);
Или
$dataProvider->setSort([
'defaultOrder' => ['topic_order'=>SORT_DESC],
'attributes' => [...
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();
Попробуйте это
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$sort = $dataProvider->getSort();
$sort->defaultOrder = ['id' => SORT_ASC];
$dataProvider->setSort($sort);
Вы можете изменить модель поиска следующим образом
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => [
'defaultOrder' => ['user_id =5 asc, document_id asc']
]
]);