Many to many 映射多个上关系中的不同列名

Many to many 映射多个上关系中的不同列名,many-to-many,yii,Many To Many,Yii,在Yii中,联接的表列名是否有限制 你看,我有两个表加上一个多-多关系的联接表,但不幸的是,它们的列名都不同,由于限制,我无法更改列名以匹配 所以在表1中,我有一列Table1_id,它是PK 在表2中,我有一列Table2ID,它是PK 然后在联接表Table3中,我有两列Table1ID和Table2ID 请注意,Table1的PK是Table1_id,但联接表使用Table1ID 我需要多对多的关系来处理不同的名字。在Table1ar类中有这个关系函数 // Table 1 column

在Yii中,联接的表列名是否有限制

你看,我有两个表加上一个多-多关系的联接表,但不幸的是,它们的列名都不同,由于限制,我无法更改列名以匹配

所以在表1中,我有一列Table1_id,它是PK

在表2中,我有一列Table2ID,它是PK

然后在联接表Table3中,我有两列Table1ID和Table2ID

请注意,Table1的PK是Table1_id,但联接表使用Table1ID

我需要多对多的关系来处理不同的名字。在Table1ar类中有这个关系函数

// 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)');
    }
}
这会引发错误:
无效的列名“table1\u id”


正如我前面所说的,不可能更改数据库中的列名。

首先,我不确定您是如何从这个示例中调用关系的。我认为,您需要这样命名关系(
table1Relation
):

然后调用
$myTable2Model->table1Relation
获取关系。但也许你忘了键入那部分代码,并且已经在这样做了

表2
表1
上的错误
无效列名“table1\u id”
关系可能在错误的表中查找主键。如果您可以显示整个错误消息,这可能会对解决此问题有很大帮助

您可能只需要切换关系表声明的顺序(即
Table1ID,Table2ID
,而不是
Table2ID,Table1ID
)。试试这个:

class Table2 extends CActiveRecord {
  public function relations() {
    return array('table1Relation'=>array(
      self::MANY_MANY, 'Table1', 'Table3(Table1ID,Table2ID)')
    );
  }
}
我希望这有点帮助。:)祝你好运

class Table2 extends CActiveRecord {
  public function relations() {
    return array('table1Relation'=>array(
      self::MANY_MANY, 'Table1', 'Table3(Table1ID,Table2ID)')
    );
  }
}