YII2 Сортировка в GridView по нескольким полям

И снова заметка для себя… Тут будет рассмотрено возможность сортировки по двум полям в GridView,  а точнее в YII2 ActiveData Provider, ведь именно он осуществляет выборку и сортировку…

Следующие изменения следует дописывать в функцию search($params) модели связанной с GridView.

Есть у Active Data Provider  свойство отвечающее за возможность сортировки по нескольким полям —

$dataProvider->sort->enableMultiSort = true;

— По умолчанию стоит False, установив значение в true, вы активируете возможность сортировки по нескольким полям.

Взаимозависимая сортировка полей в Yii2 Active Data Provider (Grid View и другие способы отображения)

Допустим нам необходимо при сортировке первого поля по возрастанию (ASC) сортировать второе поле в таком же порядке, и наоборот — при сортировке второго поля, в том же порядке сортировать и первое. Для этого, как и ранее,  допишем в функцию search($params) модели связанной с GridView следующий код.

$dataProvider->sort->attributes['interiror_d'] = [
'asc' => ['pillow.interiror_d' => SORT_ASC,'pillow.ext_d' => SORT_ASC],
'desc' => ['pillow.interiror_d' => SORT_DESC,'pillow.ext_d' => SORT_DESC],
];
$dataProvider->sort->attributes['pillow.ext_d'] = [ 
'asc' => ['pillow.ext_d' => SORT_ASC,'interiror_d' => SORT_ASC], 
'desc' => ['pillow.ext_d' => SORT_DESC,'interiror_d' => SORT_DESC], 
];

Где interiror_d — первое поле,а pillow.ext_d — второе поле нашей таблицы

Хочется заметить, что при $dataProvider->sort->enableMultiSort = true и сортировке пользователем  сразу по двум полям возникала путаница в сортировке  » взаимозависимых » полей


Добавить комментарий