Sequelize BelongsToMany 创建一个新行而不是使用现有的

时间:2021-03-15 00:35:00

标签: javascript sql node.js database sequelize.js

按照 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).

0 个答案:

没有答案