-1

結合と条件を含む複雑なクエリがあり
、CSqlDataProvider でデータを取得していますが、
リレーショナル テーブル レコードも結合する必要があります。

たとえば、テーブル A ( products) とテーブル B ( product_modifications)
があるとします。製品とその変更を一覧表示する必要があります。

テーブルAからデータを取得し、テーブルA
の各レコードに対してテーブルBからいくつかのレコードを取得する必要があります.クエリはテーブルBから配列を取得する必要があります.

基本コード:

class Product extends CActiveRecord
{
       //some code
       public function relations()
       {
           return array(
              'modifications' => array(self::HAS_MANY, 'Modification', 'modification_product_id'),
           );
       }
      //some code
}

私の質問

$sql = Yii::app()->db->createCommand();
...//different joins and conditions
$this->dataProvider = new CSqlDataProvider($sql->text, array(
    'keyField' => 'product_id',         
    'pagination' => array('pageSize' => 20),            
));

テーブル B ( ) のレコードを結合するにはどうすればよいproduct_modificationsですか? そのCActiveDataProviderように:

$this->dataProvider = new CActiveDataProvider ('products', array(
    'pagination' => array('pageSize' => 20), 
    'criteria' => array(
        'with' => array(
            'modifications' => array('condition' => 'some condition',),
        ),
    ),  
));

しかし、私はこれを行う方法がわかりませんCSqlDataProvider

UPD : クエリを対応する CActiveDataProvider クエリに変換することで解決

4

1 に答える 1

0

AR 関係は、Db を操作するためのまったく異なるツールであるため、SQL コマンドで使用することはできません。ActiveRecord では関係を使用しており、Sql コマンドでは sql-join を使用しています。つまり、結合を使用して条件を追加する必要があります。

$sql = Yii::app()->db->createCommand();
...//different joins and conditions + your condition
于 2014-04-29T11:34:12.943 に答える