如何通过另一个相关的表Yii CDbCriteria过滤查询?

时间:2016-07-12 18:12:58

标签: php mysql yii

这是我的mysql表结构。 enter image description here

我希望用户这样订购产品数量和金额的总和。 enter image description here

我的代码在这里,但不是真的。

<?php
 $criteria = new CDbCriteria;
 $criteria->with = 'orders';
 $criteria->together = true;
 if(!empty($_GET['email'])){
     $email = CHtml::encode($_GET['email']);
     if($user = Users::model()->findByAttributes(array('email'=>$email))){
          $criteria->addSearchCondition('orders.user_id', $user->id);
     }
 }
 $products = Products::model()->findAll($criteria);
 ?>

1 个答案:

答案 0 :(得分:0)

如果你在模特和同名中有良好的关系你可以尝试类似的东西(但我从Orders开始而不是从产品开始 - 你也可以从产品开始):

$criteria = new CDbCriteria;
    $criteria->select = 'SUM(t.amount) as amount_sum, SUM(oP.quantity) as quantity_sum, p.title, p.code';
         $criteria->with = ['orderProducts'=>['alias'=>'oP'], 'orderProducts.Products'=>['alias'=>'p']];
         $criteria->together = true;
    $criteria->group = 't.id, oP.product_id, p.id';
         if(!empty($_GET['email'])){
             $email = CHtml::encode($_GET['email']);
             if($user = Users::model()->findByAttributes(array('email'=>$email))){
                  $criteria->addSearchCondition('t.user_id', $user->id);
             }
         }
         $orders = Orders::model()->findAll($criteria);

PS:你需要为模型添加属性:public $ amount_sum和public $ quantity_sum。