Php 具有关系的Yii CSqlDataProvider
我有一个包含连接和条件的复杂查询Php 具有关系的Yii CSqlDataProvider,php,mysql,yii,cactivedataprovider,csqldataprovider,Php,Mysql,Yii,Cactivedataprovider,Csqldataprovider,我有一个包含连接和条件的复杂查询 我通过CSqlDataProvider获取数据 但我还需要连接关系表记录 比如说,我们有表A(产品)和表B(产品修改) 我需要列出产品及其修改 我从表A中获取数据,还需要从表B中获取一些记录 对于表A中的每个记录,查询应该从表B中获取一个数组 基本代码: class Product extends CActiveRecord { //some code public function relations() {
我通过CSqlDataProvider获取数据
但我还需要连接关系表记录 比如说,我们有表A(
产品
)和表B(产品修改
)我需要列出产品及其修改 我从表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\u modifications
)中的记录?
在CActiveDataProvider
中,它类似于:
$this->dataProvider = new CActiveDataProvider ('products', array(
'pagination' => array('pageSize' => 20),
'criteria' => array(
'with' => array(
'modifications' => array('condition' => 'some condition',),
),
),
));
但是我不知道如何使用CSqlDataProvider
UPD:
通过将查询转换为相应的CActiveDataProvider查询来解决此问题您不能将AR关系与sql命令一起使用,因为它是与Db完全不同的工具。在ActiveRecord中使用关系,在Sql命令中使用Sql连接。这意味着您应该使用join在其中添加您的条件:
$sql = Yii::app()->db->createCommand();
...//different joins and conditions + your condition
定义关系时会有一个条件字段,同一个模型具有多个不同条件的关系是没有问题的。你为什么不把你的特殊情况分开处理呢?例如,我可能有一个category表和一个products表,category模型将同时有一个products和一个activeProducts关系,我可以根据需要使用这两个关系。是的,但我不需要只连接一行。我需要将表B中的几行连接到表A中的一行。。。这就是问题所在。我需要明确的查询。所以我考虑了一些机制,这些机制将为每个产品返回一系列修改。我不知道如何为循环中的每个产品进行单独的查询。