Yii2 framework backup
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

1.8 KiB

Sorting

Sometimes the data that is to be displayed should be sorted according to one or several attributes. If you are using a data provider with one of the data widgets, sorting is handled for you automatically. If not, you should create a yii\data\Sort instance, configure it and apply it to the query. It can also be passed to the view, where it can be used to create links to sort by certain attributes.

A typical usage example is as follows,

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

    return $this->render('index', [
         'models' => $models,
         'sort' => $sort,
    ]);
}

In the view:

// display links leading to sort actions
echo $sort->link('name') . ' | ' . $sort->link('age');

foreach ($models as $model) {
    // display $model here
}

In the above, we declare two attributes that support sorting: name and age. We pass the sort information to the Article query so that the query results are sorted by the orders specified by the Sort object. In the view, we show two hyperlinks that can lead to pages with the data sorted by the corresponding attributes.

The yii\data\Sort class will obtain the parameters passed with the request automatically and adjust the sort options accordingly. You can adjust the parameters by configuring the yii\data\Sort::$params property.