2017-11-15 7 views
0

私は現在、Sequelizeの移行の使い方を学んでいます。したがって、いくつかのサンプル・モデルを作成し、それらをマイグレーションしました。いいえ、列を削除しようとしました - データが挿入されていない限り、移行は正常に機能します。あまりにも、Mの関係:Sequelize Migrationsで関連レコードを削除せずにキー以外の列を削除するにはどうすればよいですか?

Model1 {id:int, name:string, description:string, fk_model2:int {references Model2:id} } 
Model2 {id:int, name:string, description:string, test:string} 

Model1toModel2 {id_model1:int, id_model2:int} //not a real model but a table 

が1あり:nは関係 MODEL1 間とモデル2、そしてnだからここ

は私の例のモデルです。 n:m関係は、データベースで表を使用して表され、独自の移行によって作成されます。

今、この問題があります:(示すように) 私はテーブルモデル2にテストという名前の列を定義しました。サンプルデータを挿入した後、移行を実行しようとしましたが、この列は削除されます。テーブルモデル2でこれはうまく動作します。

最初の試み:移行ファイルにテーブルを作成するときに、私はMODEL1テーブルfk_model2 - カラムにonUpdate: 'cascade', onDelete: 'cascade'を使用。 したがって、削除列の移行では、モデル1テーブルと、n:m関係用に作成されたモデル1モデル2テーブルが空になりました。それは私が望むものではありません。

2回目:onUpdate: 'cascade', onDelete: 'restrict'を使用しました。これは私がERROR: SQLITE_CONSTRAINT: FOREIGN KEY constraint failedを今私は今モデル2 - モデル1で使用されているデータを削除することはできませんと私を与える。また、これは私が望むものではありません。

質問:テーブルを移行すると、レコード全体が削除され、移行ファイルで定義された新しい条件に従って再作成されますか? - ON DELETE - コンディションが鳴っていますか?

は、どのように私はそれだけでテーブルMODEL1とModel1toModel2に触れることなく、キー値ではなく、列テストを削除することを実現するだろうか? NULLまたはDEFAULTを設定するMODEL1 N に:モデル2におけるキー(&ため、レコード全体)が削除された場合(もちろん、私はのレコードModel1toModel2はあまりにも、削除、および1になりたいです。)

答えて

0

私はここでの問題/解決策を見つけた: How to delete or add column in SQLITE?

Sequelizeだけ列を削除するためにふり、これに代えて、それがデータを削除し、期待通りに後でそれを再作成します。これにより、関連するレコードがドロップされたり、SQLエラーがスローされたりします。

関連する問題