#many-to-many #yii
#многие ко многим #yii
Вопрос:
Существует ли в Yii ограничение на имена столбцов таблицы для объединений?
Видите ли, у меня есть две таблицы плюс таблица соединений для отношения MANY_MANY, но, к сожалению, имена столбцов во всех из них разные, я не могу изменить имена столбцов для соответствия из-за ограничений.
Итак, в Table1 у меня есть столбец table1_id, который является PK
В Table2 у меня есть столбец Table2ID, который является PK
Затем в таблице соединений Table3 у меня есть 2 столбца Table1ID и Table2ID
Обратите внимание, что PK Table1 равен table1_id, но в таблице объединения используется Table1ID
Мне нужно отношение «многие ко многим» для работы с разными именами. Итак, у меня есть эта функция отношений в классе Table1 AR
// Table 1 column name is table1_id, but join table has it as Table1ID
class Table1 extends CActiveRecord {
public function relations() {
return array(self::MANY_MANY, 'Table2', 'Table3(Table1ID, Table2ID)');
}
}
class Table2 extends CActiveRecord {
public function relations() {
return array(self::MANY_MANY, 'Table1', 'Table3(Table2ID, Table1ID)');
}
}
Это продолжает выдавать ошибку: Invalid column name 'table1_id'
Как я уже говорил ранее, изменить имена столбцов в базе данных невозможно.
Ответ №1:
Во-первых, я не уверен, как вы вызываете отношение из этого примера. Я думаю, вам нужно назвать отношение примерно так ( table1Relation
):
class Table2 extends CActiveRecord {
public function relations() {
return array('table1Relation'=>array(
self::MANY_MANY, 'Table1', 'Table3(Table2ID, Table1ID)')
);
}
}
Затем вы вызываете $myTable2Model->table1Relation
, чтобы получить отношение. Но, возможно, вы забыли ввести эту часть кода и уже делаете это…
Ошибка Invalid column name 'table1_id'
включена Table2
или Table1
?Возможно, связь ищет первичный ключ не в той таблице. Если бы вы могли показать все сообщение об ошибке, это могло бы очень помочь в решении этой проблемы.
Возможно, вам просто нужно изменить порядок объявления вашей таблицы отношений (т. Е. Table1ID,Table2ID
Вместо Table2ID, Table1ID
). Попробуйте это:
class Table2 extends CActiveRecord {
public function relations() {
return array('table1Relation'=>array(
self::MANY_MANY, 'Table1', 'Table3(Table1ID,Table2ID)')
);
}
}
Я надеюсь, что это немного поможет. 🙂 Удачи!