При выводе нескольких строк данных часто требуется сортировка по определённым столбцам, указанным пользователем. Yii использует объект yii\data\Sort для представления информации о схеме сортировки. В частности,
Чтобы использовать yii\data\Sort, объявите доступные для сортировки атрибуты, затем получите текущие параметры сортировки из attributeOrders или orders и используйте их для настройки запроса данных. Например:
use yii\data\Sort;
$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',
],
],
]);
$articles = Article::find()
->where(['status' => 1])
->orderBy($sort->orders)
->all();
В примере выше для объекта Sort объявлены два атрибута: age и name.
Атрибут age - это простой атрибут, соответствующий атрибуту age класса Active Record Article.
Он эквивалентен следующему объявлению:
'age' => [
'asc' => ['age' => SORT_ASC],
'desc' => ['age' => SORT_DESC],
'default' => SORT_ASC,
'label' => Inflector::camel2words('age'),
]
Атрибут name - это составной атрибут, определённый через first_name и last_name модели Article.
Он объявлен с помощью следующей структуры массива:
asc и desc задают порядок сортировки по атрибуту по возрастанию и убыванию соответственно.
Их значения представляют реальные столбцы и направления сортировки. Можно указать один или несколько столбцов
для простой или составной сортировки.default задаёт направление сортировки при первом запросе.
По умолчанию - по возрастанию: если атрибут ранее не сортировался и пользователь запросил сортировку по нему,
данные будут отсортированы по возрастанию.label задаёт метку, используемую при вызове yii\data\Sort::link() для создания ссылки сортировки.
Если не указан, для генерации метки из имени атрибута будет вызван yii\helpers\Inflector::camel2words().
Метка не кодируется в HTML.Информация: Значение orders можно передавать напрямую в запрос к базе данных для построения секции
ORDER BY. Не используйте для этого attributeOrders, так как некоторые атрибуты могут быть составными и не будут распознаны запросом к БД.
Для создания гиперссылки, по которой пользователь может запросить сортировку по указанному атрибуту, вызовите yii\data\Sort::link(). Для создания URL сортировки используйте yii\data\Sort::createUrl(). Например:
// задаёт маршрут, который будет использоваться в URL
// если не указан, используется текущий маршрут
$sort->route = 'article/index';
// отображение ссылок сортировки по name и age
echo $sort->link('name') . ' | ' . $sort->link('age');
// выводит: /index.php?r=article%2Findex&sort=age
echo $sort->createUrl('age');
yii\data\Sort проверяет query-параметр sort, чтобы определить, по каким атрибутам запрошена сортировка.
Сортировку по умолчанию (при отсутствии параметра) можно задать через yii\data\Sort::$defaultOrder.
Имя query-параметра настраивается через свойство sortParam.
Found a typo, or you think this page needs improvement?
Edit it on GitHub !
Signup or Login in order to comment.