简体   繁体   English

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

[英]How can i filter query by another related table Yii CDbCriteria?

This my mysql tables structure. 这是我的mysql表结构。 在此输入图像描述

I want sum of ordered products quantity and amount by a user like this. 我想要这样的用户的订购产品数量和金额的总和。 在此输入图像描述

My codes is here, but is not true. 我的代码在这里,但不是真的。

<?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);
 ?>

If u have good relations in models and same names u can try someth similar to (but i started from Orders not from Products - u can start from Products too) : 如果你在模特和同名中有良好的关系你可以尝试类似的东西(但我从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: U need too add attributes to models: public $amount_sum and public $quantity_sum. PS:你需要为模型添加属性:public $ amount_sum和public $ quantity_sum。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM