2012-02-17 68 views
0

行,所以我有两种型号:Yii的,多个​​MANY_MANY关系

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×ModuleXYZ和2x ModuleABC到阵列1,我只会得到以下

echo count($Array1->modules); // would echo 2 

在那里我希望它呼应5

什么想法?

回答

0

好,我发现这个问题的最佳解决方案约4小时通过代码涉水后...只是用一个神奇的方法做手工的关系

  1. 第一注释掉关系

  2. 创造一个神奇的属性一样的关系属性格式如

    var $_modules = array(); 
    
  3. 使用魔术get方法和dbcriteria建立查询manua lly

    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); 
    }