Yii CSqlDataProvider与关系

时间:2014-04-29 11:19:22

标签: php mysql yii cactivedataprovider csqldataprovider

我有一个带有连接和条件的复杂查询 我用CSqlDataProvider获取数据 但我还需要加入关系表记录。

让我们说,我们有表A(products)和表B(product_modifications
我需要列出产品及其修改。

我从表A中获取数据,我还需要从表B中获取一些记录 对于表A中的每条记录,查询应从表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查询来解决

1 个答案:

答案 0 :(得分:0)

您不能将AR-relation与sql命令一起使用,因为它与使用Db完全不同。在ActiveRecord中,您使用的是关系,在Sql命令中您使用的是sql-joins。这意味着你应该通过join添加条件:

$sql = Yii::app()->db->createCommand();
...//different joins and conditions + your condition