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 哎,多个多个关系_Php_Mysql_Activerecord_Yii_Yii Cmodel - Fatal编程技术网

Php 哎,多个多个关系

Php 哎,多个多个关系,php,mysql,activerecord,yii,yii-cmodel,Php,Mysql,Activerecord,Yii,Yii Cmodel,好的,我有两种型号: 1:pv_阵列光伏阵列 2:光伏组件模块 两者之间有许多关系: return array( 'modules' => array(self::MANY_MANY, 'module', 'module_to_array(array_id, module_id)'), ); return array( 'arrays' => arr

好的,我有两种型号:

1:pv_阵列光伏阵列 2:光伏组件模块

两者之间有许多关系:

        return array(           
                'modules' => array(self::MANY_MANY, 'module', 'module_to_array(array_id, module_id)'),
        );

        return array(
                'arrays' => array(self::MANY_MANY, 'pv_array', 'module_to_array(module_id, array_id)'),
        );
问题是,当我将模块添加到阵列中时,我需要能够将同一模块的多个实例添加到阵列中。。。我可以这样做没有问题,当我检查数据库表模块\u to\u数组时,有多个条目存在

虽然现在我要访问阵列中的模块,如下所示:

$pv_array = pv_array::model()->findByPk( 2 );
echo count( $pv_array->modules);
它只计算模块的单个实例,而不计算当前模块的多个实例

例如,如果我在Array1中添加了3个ModuleXYZ和2个ModuleABC,那么我只能得到以下结果

echo count( $Array1->modules ); // would echo 2
我想让它在哪里回音5


有什么想法吗

好的,我花了大约4个小时的时间涉猎代码,找到了这个问题的最佳解决方案。。。只是用一种神奇的方法手动建立关系

先把关系说出来

创建一个与关系属性相同的神奇属性,例如

    var $_modules = array();
使用magic get方法和dbcriteria手动构建查询

public function getModules() 
{
     $criteria = new CDbCriteria;
     $criteria->join = 'LEFT JOIN component_to_array ON component_to_array.array_id = '.$this->id.' AND t.id = component_to_array.component_id';
     $criteria->condition = 'component_to_array.array_id = '.$this->id.'';

     return component::model()->findAll($criteria);
}