-1

我有一个带有连接和条件的复杂查询,
我使用 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 查询来解决

4

1 回答 1

0

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

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