0

わかりました。2つのモデルがあります。

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 xModuleXYZと2xModuleABCをArray1に追加した場合、次のようになります。

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

エコーしたい場所5

何か案が?

4

1 に答える 1

0

わかりました。コードを約4時間歩いた後、この問題の最善の解決策を発見しました...魔法の方法で手動で関係を実行するだけです

  1. 最初に関係をコメントアウトする

  2. 関係プロパティと同じ魔法のプロパティを作成します。

        var $_modules = array();
    
  3. 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);
    }
    
于 2012-02-18T05:34:08.153 に答える