好的,我有两个型号:
1:pv_array(光伏阵列) 2:模块(光伏模块)
两者之间存在MANY_MANY关系:
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)'),
);
问题是当我向数组添加模块时,我需要能够将同一模块的多个实例添加到数组中......我可以做到这一点没有问题,当我检查数据库表module_to_array时,存在多个条目。
虽然我现在去按如下方式访问数组中的模块:
$pv_array = pv_array::model()->findByPk( 2 );
echo count( $pv_array->modules);
它只计算模块的单个实例,而不是存在的多个模块实例...... ??
例如,如果我将3 x ModuleXYZ和2x ModuleABC添加到Array1,我只会得到以下内容
echo count( $Array1->modules ); // would echo 2
我希望它能回应5
任何想法?
答案 0 :(得分:0)
好的,我在通过代码大约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);
}