Yii2 добавить связанный атрибут для сортировки
У меня есть обычный ModelSearch с ActiveDataProvider, и я хотел бы добавить виртуальный / связанный атрибут для сортировки в gridview. Если я использую setSort и добавляю этот единственный атрибут, то все остальные атрибуты больше не сортируются. Есть ли встроенный способ добавить атрибут в сортировку? Большое спасибо!
public function search($params) {
$query = Za::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder' => ['aonr' => SORT_ASC]],
'pagination' => [
'pageSize' => 15,
],
]);
$dataProvider->setSort([
'attributes' => [
'lwnr' => [
'asc' => ['lwnr' => SORT_ASC],
'desc' => ['lwnr' => SORT_DESC],
'label' => 'lwnr',
'default' => SORT_DESC,
],
]
]);
$this->load($params);
...
}
1 ответ
Решение
Вы можете установить сортируемые атрибуты с помощью метода setSort, но в этом случае вам нужно установить все столбцы, которые вы хотите отсортировать, а не только столбец из отношения.
Если вы хотите добавить один столбец, вы можете попробовать это (объединяя существующие атрибуты сортировки с новым):
$dataProvider->setSort([
'attributes' => array_merge(
$dataProvider->getSort()->attributes,
[
'lwnr' => [
'asc' => ['lwnr' => SORT_ASC],
'desc' => ['lwnr' => SORT_DESC],
'label' => 'lwnr',
'default' => SORT_DESC,
],
]
),
]);
или вы можете добавить отсутствующие атрибуты / столбцы вручную (что гораздо лучше)
$dataProvider->setSort([
'attributes' =>
[
'lwnr' => [
'asc' => ['lwnr' => SORT_ASC],
'desc' => ['lwnr' => SORT_DESC],
'label' => 'lwnr',
'default' => SORT_DESC,
],
// Other attribute
'id' => [
'asc' => ['id' => SORT_ASC],
'desc' => ['id' => SORT_DESC],
],
...
],
]);
По-другому:
$dataProvider->getSort()->attributes['lwnr'] = [
'asc' => ['lwnr' => SORT_ASC],
'desc' => ['lwnr' => SORT_DESC],
'label' => 'lwnr',
'default' => SORT_DESC,
];