按照 https://sequelize.org/master/manual/creating-with-associations.html 中的示例(最后一部分,多对多),我尝试使用 Sequelize(和 MS SQL Server)向我的 nodejs 应用程序中的帖子添加标签。这是我的做法:
创建标签:
max(students,key=lambda x:x[1])
是的,它保存到数据库。我检查了。继续创建帖子:
Tag.create({
name: "Photography",
description: "tag for photo related things."
})
这就是问题发生的地方。它没有使用名称为“摄影”的现有标签并将其 ID 与帖子 ID 一起放入连接表中,而是创建另一个标签使用不同的 ID,但将其命名为摄影和链接。该关系被添加到 PostTags 表中,但没有使用正确的标签 ID。 如何让它使用标签表中的现有行?
模型定义为:
Post.create({
name: "a photo",
description: "a description",
Tags: [{name: 'Photography'}]
}, {
include: [ Tag ]
})
关系定义为:
class Post extends Model {
}
Post.init({
name: DataTypes.STRING,
description: DataTypes.STRING
}, {
sequelize: sqlconnection,
modelName: 'Post'
})
class Tag extends Model {
}
Tag.init({
name: DataTypes.STRING,
description: DataTypes.STRING
}, {
sequelize: sqlconnection,
modelName: 'Tag'
})
还尝试使用 id 而不是 name 如下,但它抛出一个 Tag.belongsToMany(Post, {
through: {
model: 'PostTags'
}
})
Post.belongsToMany(Tag, {
through: {
model: 'PostTags'
}
})
- 特别是:UniqueConstraintError [SequelizeUniqueConstraintError]: Validation error
我认为这是因为上述问题,而不是使用它尝试创建的现有行一个新的,有给定的信息。
original: RequestError: Violation of PRIMARY KEY constraint 'PK__Tags__3213E83F58EED7F3'. Cannot insert duplicate key in object 'dbo.Tags'. The duplicate key value is (1).