Yii再向CDbCriteria添加一个选择

Teb*_*ebe 11 php database orm yii

我对Yii比较陌生.

我对原始SQL很有信心,但在ORM方面仍然有点迷失.所以这可能是一个虚假的问题.

我已经检索了所有必要的记录,例如CDbCriteria:

$criteria = new CDbCriteria(array(
  'select' => 'sum(items) as items',
  // 'condition' => 't.items > 0 and order.storage = "'Product::STORAGE_LOCAL . '"',

  'condition' => 't.items > 0 and order.storage = "' .  Product::STORAGE_LOCAL . '"',
  'order' => 'sum(items) DESC',
  'with' => array(
    'product' => array(
       'select' => 'code, title, producer, local_rest',

        **// 'select' => 'code, title, producer, sum(local_rest) as   local_rest',**
       'group' => 'product.code',
    )
  ),

  'join' => 'inner join `order` `order` on `t`.`order_id` = `order`.`id`',
   // 'group' => '`product`.`code`, `product`.`title`',
   'group' => '`product`.`code`',
   'together' => true
));
Run Code Online (Sandbox Code Playgroud)

我试着得到local_rest田野的总和group by.不幸的是,它不会返回它应该是什么.

这就是我尝试将其构建为CDbCriteria:

// 'select' => 'code, title, producer, sum(local_rest) as local_rest',.- 没运气.

我可以使用分离查询得到它:

$sum_local_rest = Yii::app()->db->createCommand("
  SELECT  id,code, title, sum(local_rest) as sum_rest FROM product GROUP BY code
  ORDER BY `sum_rest`  DESC
");
Run Code Online (Sandbox Code Playgroud)

还有一点需要注意 - 产品表中有重复的记录.即我们有不止一次的同一产品.但如果我使用GROUP BY它有助于划分这个缺点.这是由于糟糕的数据库设计,应该在将来修复.

问题是,我需要以某种方式与约束它CDbCriteria,因为它的使用CDataProviderCDataProvider被使用GridView.

如何将这两个问题合二为一的提示CDbCriteria

提前致谢

编辑

看看目前的答案,我觉得我需要总结一下.主要问题是我需要告诉CDbCriteria检索记录(由HAS_Many连接绑定)并计算所有这些记录的SUM并使这些记录成为CDbCriteriaGROUP BY.没有其它的方法.我不能明确地这样做.因为我传递CDbCriteriaCDataProvider它应该运行查询.这就是Yii的工作方式(据我所知).

Bfc*_*fcm 2

您也不必将所有元素传递给条件。尝试将条件拆分为更多代码,如下所示:

 $criteria = new CDbCriteria();
 $criteria->select = 'sum(items) as items, ' . Product::STORAGE_LOCAL;
 $criteria->condition = 't.items > 0 and order.storage = ' .  Product::STORAGE_LOCAL;

//etc.
Run Code Online (Sandbox Code Playgroud)