Yii2 data provider default sorting Yii2 data provider default sorting php php

Yii2 data provider default sorting


I think there's proper solution. Configure the yii\data\Sort object:

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

Official doc link


Or

       $dataProvider->setSort([        'defaultOrder' => ['topic_order'=>SORT_DESC],        'attributes' => [...


defaultOrder contain a array where key is a column name and value is a SORT_DESC or SORT_ASC that's why below code not working.

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

Correct Way

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

Note: If a query already specifies the orderBy clause, the new ordering instructions given by end users (through the sort configuration) will be appended to the existing orderBy clause. Any existing limit and offset clauses will be overwritten by the pagination request from end users (through the pagination configuration).

You can detail learn from Yii2 Guide of Data Provider

Sorting By passing Sort object in query

 $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();