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の場合は、外部キーを追加しないでください。

または、ハックドゥーガリーを実行してテーブルを保存し、外部キーを使用してテーブルを再作成し、すべてのデータを再度ロードします。

于 2012-04-05T07:48:46.510 に答える