Отображение другого имени столбца в отношениях на MANY_MANY - PullRequest
0 голосов
/ 21 октября 2011

В Yii есть ограничение на имена столбцов таблицы для объединений?

Видите ли, у меня есть две таблицы плюс таблица соединения для отношения MANY_MANY, но имена столбцов, к сожалению, отличаются во всех из них, я не могу изменить имена столбцов, чтобы соответствовать из-за ограничений.

Таким образом, в таблице 1 у меня есть столбец table1_id, который является PK

В таблице 2 у меня есть столбец Table2ID, который является PK

Затем в таблице соединений Table3 у меня есть 2 столбца Table1ID и Table2ID

Обратите внимание, что PK Table1 - это table1_id, но в таблице соединения используется Table1ID

Мне нужны отношения многие ко многим, чтобы работать с разными именами. Итак, у меня есть эта функция отношений в Table1 AR Class

// 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 Ответ

1 голос
/ 22 октября 2011

Во-первых, я не уверен, как вы вызываете отношение из этого примера. Вам нужно назвать отношение, я думаю, примерно так (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)')
    );
  }
}

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

...