Yii 1.15 CdbCriteria добавляет собственную сортировку - магия
Бывает, что Yii неявно добавляет порядок по идентификатору в критерии.
Обратите внимание на эту строку в коде $ критериев-> заказ ='t.id ASC';
Мой исходный код:
$criteria = new CDbCriteria;
$criteria->select = 't.id, order_id, was_before, became, t.created_at';
$criteria->addCondition('t.created_at >= \'' . $from . '\'');
$criteria->addCondition('t.created_at <= \'' . $to . '\'');
$criteria->alias ='t';
$criteria->with = [
'order' => [
'select' => 'm.id as b, m.status',
'condition' => 'm.status = ' . Order::STATUS_CANCELLED,
'alias' => 'm',
'with' => [
'packerRest' => [
'select'=> 'g.id as n',
'alias' => 'g'
]
]
],
];
$criteria->order ='t.id ASC';
Сброс критериев:
Результирующая ошибка:
Как видите, я не добавил сортировку по идентификатору. Yii делает это как-то и ломает весь запрос.
Я уже готов переписать его на чистом MySQL.
Есть идеи, почему это так?
1 ответ
Решение
В Yii
можно определить порядок для связанных моделей в модели relations()
метод через что-то вроде: 'packerRest' => [self::HAS_MANY, 'PackerRest', 'order_id', 'order' => 'id DESC' ]
что оказалось в вашем Order
модель.
PS: Мы уже выяснили проблему в комментариях к вопросу, но я публикую этот ответ, так что мы просто в формате SO, чтобы его было легче найти и прочитать для других.