Yii, Несколько MANY_MANY отношений - PullRequest
0 голосов
/ 17 февраля 2012

Хорошо, у меня есть две модели:

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 к массиву 1, я получу только следующее

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

где я бы хотел, чтобы это повторилось 5

есть идеи?

1 Ответ

0 голосов
/ 18 февраля 2012

хорошо, я нашел лучшее решение этой проблемы примерно через 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);
    }
    
...