0

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

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

1 回答 1

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

于 2012-04-05T07:48:46.510 回答