我有一个带有连接和条件的复杂查询 我用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查询来解决
答案 0 :(得分:0)
您不能将AR-relation与sql命令一起使用,因为它与使用Db完全不同。在ActiveRecord中,您使用的是关系,在Sql命令中您使用的是sql-joins。这意味着你应该通过join添加条件:
$sql = Yii::app()->db->createCommand();
...//different joins and conditions + your condition