Сопоставление разных имен столбцов в отношениях на MANY_MANY

#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)')
    );
  }
}
  

Я надеюсь, что это немного поможет. 🙂 Удачи!