@twopizza

Как сделать сортировку по вычисляемым полям в GridView?

По умолчанию для сортировки в GridView доступны только те поля, которые есть в таблице модели.
Задача - сортировать по вычисляемым полям. Есть туториал, тык, но там просто достается значение через связь и запихивается в setSort в методе search:
$dataProvider->setSort([
        'attributes' => [
            'id',
            'countryName' => [
                'asc' => ['tbl_country.country_name' => SORT_ASC],
                'desc' => ['tbl_country.country_name' => SORT_DESC],
                'label' => 'Country Name'
            ]
        ]
    ]);

В моем случае значения должны высчитываться на основе связанных данных.
Решил проблему следующим образом. В методе search:

$query = Model::find();
$select = ['*', '(SELECT %MY QUERY WITH COUNT JOINS ETC%) AS calculatedField'];
$query->select($select);
$dataProvider = new ActiveDataProvider([
    'query' => $query,
]);
$dataProvider->setSort([
    'attributes'=>[
        'calculatedField' => [
            'asc'=>['calculatedField'=>SORT_ASC,],
            'desc'=>['calculatedField'=>SORT_DESC],
        ],
    ]
]);


Есть ли какие то более элегантные решения? или в самом GridView что то для этого есть?
  • Вопрос задан
  • 963 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы