2

碰巧 Yii 隐式地将 ID 排序添加到标准中。

注意代码中的这一行 $criteria->order ='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';

标准转储:

在此处输入图像描述

结果错误:

在此处输入图像描述

如您所见,我没有添加按 ID 排序。Yii 以某种方式完成了它并打破了整个查询。

我已经准备好用纯 MySQL 重写它。

任何想法为什么会这样?

4

1 回答 1

1

可以通过以下方式在Yii模型的relations()方法中定义相关模型的排序:'packerRest' => [self::HAS_MANY, 'PackerRest', 'order_id', 'order' => 'id DESC' ]这就是Order模型中的结果。

PS:我们已经在问题的评论中发现了这个问题,但我发布了这个答案,所以我们只是采用 SO 格式,以便其他人更容易找到和阅读。

于 2015-11-26T12:05:31.283 回答