我正在尝试将一个外键添加到我的表中,但是当我尝试这样做时,我会收到:
SQLite不支持向现有表添加外键约束。
$this->addForeignKey('fk_user', 'tbl_data', 'id_responsable','tbl_user', 'id', 'CASCADE');
$this->createTable('tbl_data', array(
'id' => 'pk',
'name' => 'string',
'id_responsable' => 'integer',
));
答案 0 :(得分:1)
这是预期的行为,请参阅来源:https://github.com/yiisoft/yii/blob/master/framework/db/schema/sqlite/CSqliteSchema.php#L242
public function addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete=null, $update=null)
{
throw new CDbException(Yii::t('yii', 'Adding a foreign key constraint to an existing table is not supported by SQLite.'));
}
我假设这是尝试跨不同DBMS的可移植代码(如果它不是并且意味着只能在sqlite上工作,只是不要把调用放在那里:p)
如果你想覆盖这个功能,你必须扩展Sqlite Schema类,然后进入一个麻烦的世界。
根据Yii :: app() - > db-> driverName,关闭添加外键可能会更好。如果是== sqlite则不要添加外键。
或者做一些hack doogery来保存表,用外键重新创建它,然后重新加载所有数据。