Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有关系的Yii CSqlDataProvider_Php_Mysql_Yii_Cactivedataprovider_Csqldataprovider - Fatal编程技术网

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中的一行。。。这就是问题所在。我需要明确的查询。所以我考虑了一些机制,这些机制将为每个产品返回一系列修改。我不知道如何为循环中的每个产品进行单独的查询。