在MANY_MANY上的关系中映射不同的列名

时间:2011-10-21 04:27:43

标签: many-to-many yii

在Yii中,对连接的表列名称有限制吗?

你知道,我有两个表加上MANY_MANY关系的连接表,但不幸的是所有列的列名都不同,由于限制,我无法更改列名以匹配。

所以在Table1中我有一个列table1_id,它是PK

在表2中,我有一个Table2ID列,即PK

然后在Join表Table3中,我有2列Table1ID和Table2ID

请注意,Table1的PK是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 个答案:

答案 0 :(得分: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)')
    );
  }
}

我希望有所帮助。祝你好运!