Sqlite 3添加外键错误php yii

时间:2012-04-04 21:59:50

标签: php sqlite yii

我正在尝试将一个外键添加到我的表中,但是当我尝试这样做时,我会收到:

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',
    ));

1 个答案:

答案 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来保存表,用外键重新创建它,然后重新加载所有数据。