0

我目前即将学习如何使用 Sequelize 迁移。因此,我创建了一些示例模型并进行了迁移。不,我试图删除一列 - 只要我没有插入数据,迁移就可以正常工作。

所以这是我的示例模型:

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

Model1Model2之间存在 1:n 关系,并且也存在 n:m 关系。n:m 关系在数据库中用一个表表示,并由它自己的迁移创建。

现在出现了这个问题:我在表Model2中定义了一个名为test的列(如图)。插入一些示例数据后,我尝试运行迁移,这会删除此列。在表Model2上,这工作得很好。

第一次尝试:在迁移文件中创建表时,我在表Model1onUpdate: 'cascade', onDelete: 'cascade'中使用了fk_model2 -column 。因此,删除列迁移清空了Model1表和为 n:m 关系创建的Model1toModel2表。那不是我想要的。

第二次尝试:我用过onUpdate: 'cascade', onDelete: 'restrict'. 正如预期的那样,这给了我ERROR: SQLITE_CONSTRAINT: FOREIGN KEY constraint failed,因为我现在无法删除Model2中使用的Model1数据。这也不是我想要的。

问题:如果我迁移一个表,它是否会删除整个记录并根据迁移文件中定义的新条件重新创建它?- 所以ON DELETE-Condition 触发了?

我怎么能做到它只是删除不是键值的列test而不触及表Model1Model1toModel2?(当然,如果Model2中的键(以及整个记录)被删除,我希望Model1toModel2中的记录也被删除,并且Model1中的 1:n 被设置NULLDEFAULT.)

4

1 回答 1

0

我在这里找到了问题/解决方案: 如何在 SQLITE 中删除或添加列?

Sequelize 只是假装删除一列,而不是删除数据,然后按预期重新创建它。所以这会导致相关记录丢失或抛出 SQL 错误。

于 2017-11-17T12:46:41.783 回答