2016-07-12 8 views
1

これは私のmysqlテーブルの構造です。 enter image description here別の関連テーブルでクエリをフィルタリングするにはどうすればいいですか?Yii CDbCriteria?

このように、ご注文いただいた数量と金額の合計が欲しいです。 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); 
?> 

答えて

0

uがモデルで良好な関係と同じ名前を持っている場合はuがsomethに似て試すことができます(私は製品からの受注ではないから起動する - uがあまりにも製品から開始することができます):

$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。

+0

tank you。エラーがあります。アクティブレコード "Orders"が無効な列 "p.title"を選択しようとしています。列は表に存在するか、エイリアスを持つ式である必要があります。 – Hamid

関連する問題