我注意到,如果我尝试批量更新关联的模型,则Sequelize会删除现有记录,并在添加新记录之外再次添加相同记录。
考虑User
和Project
模型的默认示例,后者通过联接表与前者具有多对多关联。
例如,User
ID 10
有两个项目,ID 50
和60
已经分配。我想批量同步一系列新项目,例如。 30, 40, 50, 60
,因此请执行以下操作:
user.setProjects([30, 40, 50, 60])
我的期望是将50
和60
的现有条目保留下来,并在连接表中为30
和40
添加新条目。但是,我注意到50
和60
的行已删除,并为这些行再次添加了新行,这似乎是一种效率很低的方法。
我如何指示Sequelize不要删除现有记录(如果它们包含在我要传递的数组中)?我猜想是使用INSERT IGNORE INTO …
还是INSERT … ON DUPLICATE KEY UPDATE
的东西吗?我了解这些语句是特定于MySQL的,但是作为ORM,Sequelize应该有一种通用的方法来实现相同的目标,在没有直接方法可用的情况下,可以使用更简单的方法(例如,查询现有的关联而不是如果确实存在,请添加它。)
Laravel的口才有一个sync
方法,默认情况下它也做同样的事情,但是passing a false
second argument将使其只添加新的,而保留现有的。这是我正在寻找的功能。
在official documentation for this association中,它提到了一个options
对象参数,该参数将“传递给through.findAll
,bulkCreate
,update
和{{1} }”,但尚不清楚如何使用它来实现自己想要的目标。