Страница 1 из 1

Сортировка gridview по вычисляемому полю не связанному с таблицей

Добавлено: 2018.06.13, 00:53
louisvuitton
Здравствуйте,
Добавил в модель кастомный атрибут megasum - некое вычисляемое число и представим что оно не связано с табличными полями.
Можно ли сделать по нему сортировку для GridView?
Ведь сортировка это по сути ORDER BY для запроса...

Если вопрос не понятен могу уточнить что нибудь.

Re: Сортировка gridview по вычисляемому полю не связанному с таблицей

Добавлено: 2018.06.13, 02:21
louisvuitton
Не получается..
Если добавляю defaultOrder в дата провайдер

Выдает предупреждение
PHP Notice – yii\base\ErrorException
Undefined index: megasum


(megasum может быть Null кстати иногда)

Но вообще я хочу чтоб заголовок таблицы gridview был кликабельный для сортировки, а не просто отсортировать 1 раз по умолчанию.

Допустим есть

Код: Выделить всё

class Points extends ActiveRecord {
    ...
    public function getMegasum()
    {
        return rand(0, 100);
    }

}

Код: Выделить всё

 
class PointsSearch extends Points {
    ...
    public $megasum;
    
    public function rules()
    {
        return [
           ['meagasum', 'safe'],
        ];
    }

  public function search($params)
    {
        $query = Points::find();

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

        // для свяанных полей работает что то вроде 
        $dataProvider->sort->attributes['balance'] = [
            'asc' => ['points_balance.balance' => SORT_ASC],
            'desc' => ['points_balance.balance' => SORT_DESC],
        ];
        // а как сделать для нетабличного поля?!

        return $dataProvider;
    }
}

на

$dataProvider->sort->attributes['megasum'] = [
'asc' => ['megasum' => SORT_ASC],
'desc' => ['megasum' => SORT_DESC],
];


выдает

Database Exception – yii\db\Exception
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'megasum' in 'order clause'

и SQL-запрос с подствленным туда в order by megasum которого в таблице нет.

Re: Сортировка gridview по вычисляемому полю не связанному с таблицей

Добавлено: 2018.06.13, 03:22
Dominus
Привет, тут посмотрите: https://yiiframework.ru/forum/viewtopic ... 19&t=34992

Re: Сортировка gridview по вычисляемому полю не связанному с таблицей

Добавлено: 2018.06.13, 12:39
andku83

Код: Выделить всё

$query = Points::find()->select([Points::tableName().'.*', 'megasum' => new \yii\db\Expression('your-db-logik')]);
а после уже ваш megasum-order