У меня есть следующий метод, который вызывает у меня проблемы, когда я пытаюсь создать отношение более трех таблиц в Yii:
public function relations() { return array( 'info'=>array(self::BELONGS_TO, 'Software', 'ITEM_ID'), 'categories'=>array(self::MANY_MANY, 'ItemCategory', 'item_cat_relation(item_id, cat_id)', 'condition'=>'categories.cat_of_type=item_meta1.item_type_id'), ); }
Этот код дает ошибку в item_meta1.item_type_id
В общем, Yii не построен для обработки «трех табличных отношений». При этом вам все равно нужно добавить условие () в ваш запрос отношения, я думаю, проблема в том, что вы не item_meta1
таблице item_meta1
. Вы можете сделать это двумя способами:
1) Добавьте предложение JOIN в ваше отношение:
return array( 'categories'=>array(self::MANY_MANY, 'ItemCategory', 'item_cat_relation(item_id, cat_id)', 'join'=>'JOIN item_meta1 ON categories.cat_of_type=item_meta1.item_type_id' ), );
1) Добавьте предложение WITH в ваше отношение (если у вас есть отношение для другой таблицы):
return array( 'itemMeta'=>array(self::HAS_MANY, 'ItemMeta','item_type_id'), // I probably don't have this quite right, but you should get the idea 'categories'=>array(self::MANY_MANY, 'ItemCategory', 'item_cat_relation(item_id, cat_id)', 'with'=>'itemMeta', 'condition'=>'categories.cat_of_type=itemMeta.item_type_id') ), );
Я не тестировал какой-либо из этого кода даже немного, но я сделал аналогичные вещи, поэтому он должен работать в принципе. 🙂 Удачи!