我正在尝试使用Sequelize和Postgresql通过显式创建的联结表添加多对多关系。
关系两侧的表格如下关联:
Shop.belongsToMany(models.user, {through: 'visits' })
User.belongsToMany(models.shop, {through: 'visits' })
访问联结表主键的定义如下:
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true // Automatically gets converted to SERIAL for postgres
}
当我尝试插入访问时,我收到以下错误:
ERROR: duplicate key value violates unique constraint "visits_shopId_userId_key"
DETAIL: Key ("shopId", "userId")=(1, 12) already exists.
在执行pg_dump之后,我尝试通过向模型添加约束:false来删除复合键约束,但我仍然得到错误。
(我已经删除了表并在调试过程中多次重新生成)
答案 0 :(得分:1)
在挖掘Sequelize issues之后,发现删除N:M复合键上的约束是一个简单的解决方法。
直通键可以使用unique: false
属性:
Shop.belongsToMany(models.user, {
through: {
model: 'visits',
unique: false
},
constraints: false
});