Здравствуйте,
Добавил в модель кастомный атрибут megasum - некое вычисляемое число и представим что оно не связано с табличными полями.
Можно ли сделать по нему сортировку для GridView?
Ведь сортировка это по сути ORDER BY для запроса...
Если вопрос не понятен могу уточнить что нибудь.
Сортировка gridview по вычисляемому полю не связанному с таблицей
-
- Сообщения: 203
- Зарегистрирован: 2014.02.16, 03:09
-
- Сообщения: 203
- Зарегистрирован: 2014.02.16, 03:09
Re: Сортировка gridview по вычисляемому полю не связанному с таблицей
Не получается..
Если добавляю defaultOrder в дата провайдер
Выдает предупреждение
PHP Notice – yii\base\ErrorException
Undefined index: megasum
(megasum может быть Null кстати иногда)
Но вообще я хочу чтоб заголовок таблицы gridview был кликабельный для сортировки, а не просто отсортировать 1 раз по умолчанию.
Допустим есть
на
$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 которого в таблице нет.
Если добавляю 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 которого в таблице нет.
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Сортировка gridview по вычисляемому полю не связанному с таблицей
Привет, тут посмотрите: https://yiiframework.ru/forum/viewtopic ... 19&t=34992
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Сортировка gridview по вычисляемому полю не связанному с таблицей
Код: Выделить всё
$query = Points::find()->select([Points::tableName().'.*', 'megasum' => new \yii\db\Expression('your-db-logik')]);