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, чтобы его было легче найти и прочитать для других.

Другие вопросы по тегам