【问题标题】:Yii, Multiple MANY_MANY relationsYii,多个 MANY_MANY 关系
【发布时间】:2012-02-17 07:32:23
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

    标签: php mysql activerecord yii yii-cmodel


    【解决方案1】:

    好吧,经过大约 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);
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多