Yii CDbCriteria添加列

时间:2016-07-28 06:45:39

标签: mysql yii

我创建了一个标准:

        $ids = array(1,2,3);
        $criteria = new CDbCriteria;
        $criteria->select = 'SUM(quantity) as quan';
        $criteria->with = array('order');
        $criteria->condition="order.customer = ".Yii::app()->user->id." AND order.status_id <> 4 AND order.status_id <> 3 AND order.type = 0";
        $criteria->addInCondition("product_id", $ids);
        $order_prod = OrderProduct::model()->find($criteria);

但是当我运行这个时我得到了错误:

  

1140在没有GROUP BY的聚合查询中,SELECT列表的表达式#2包含非聚合列'als.t.id';这与sql_mode = only_full_group_by不兼容。执行的SQL语句是:SELECT SUM(quantity)as quan,tid AS t0_c0orderid AS t1_c0orderphone AS t1_c1orderemail AS t1_c2

在标准中,选择我只使用数量之和。

2 个答案:

答案 0 :(得分:1)

嗨禁用only_full_group_by

试试这个sql

  SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

答案 1 :(得分:0)

您希望仅从OrderProduct表中获取数量总和。因此,最好不要使用活动记录,而是使用查询编写简单命令,如下所示:

$result = Yii::app()->db->createCommand('
    SELECT SUM(t.quantity) as quan
    FROM order_product t 
    LEFT JOIN order ON order.ID = t.order_id 
    WHERE 
        order.customer = :userId AND 
        order.status_id NOT IN (3,4) AND 
        order.type = 0 AND 
        t.product_id IN (1,2,3)
')->queryScalar([
    ':userId' => Yii::app()->user->id,
]);

这里“db”是CDbConnection组件的名称。 OrderProduct表名和连接条件可能在您的系统中有所不同。