在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'
正如我之前所说,无法更改数据库中的列名。
答案 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)')
);
}
}
我希望有所帮助。祝你好运!