0

好的,所以我有两个模型:

1:pv_array(光伏阵列) 2:module(光伏模块)

它们之间存在 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

任何想法?

4

1 回答 1

0

好的,我在大约 4 个小时的代码中涉水后发现了这个问题的最佳解决方案......只是用一种神奇的方法手动完成关系

  1. 首先注释掉关系

  2. 创建一个与关系属性相同的魔法属性,例如

        var $_modules = array();
    
  3. 使用魔术 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);
    }
    
于 2012-02-18T05:34:08.153 回答