gpt4 book ai didi

node.js - 使用多对多关联对 Model.create 进行后续处理

转载 作者:行者123 更新时间:2023-12-03 22:23:17 35 4
gpt4 key购买 nike

我建立帖子和标签模型。

帖子属于许多标签,标签也属于许多帖子。

当我创建几个带有标签的帖子时,会出现 KEY DUPLICATE 错误。

如果这种方式是错误的,我如何创建带有标签的帖子?

谢谢。

nodejs: v13.10.1

Sequelize (使用 mysql2):^5.21.5

mysql2: ^2.1.0

数据库(在 Amazon RDS 上):MariaDB 10.2.21

require('dotenv').config()
const Sequelize = require('sequelize')

const host = process.env.DB_HOST
const database = process.env.DB_NAME
const username = process.env.DB_USERNAME
const password = process.env.DB_PASSWORD

const sequelize = new Sequelize(database, username, password, {
host: host,
dialect: 'mysql'
})

const Model = Sequelize.Model
const DataTypes = Sequelize.DataTypes

class Post extends Model {}

Post.init({
title: { type: DataTypes.STRING }
}, { sequelize, modelName: 'post' })

class Tag extends Model {}

Tag.init({
value: { type: DataTypes.STRING }
}, { sequelize, modelName: 'tag' })

Post.belongsToMany(Tag, { as: 'tags', through: 'post_tags' })
Tag.belongsToMany(Post, { as: 'posts', through: 'post_tags' })

async function main () {
await sequelize.sync({ force: true })
const post1 = await Post.create({
title: 'title1',
tags: [
{ id: 1, value: 'tag1' },
{ id: 2, value: 'tag2' }
]
}, {
include: [
{
model: Tag,
as: 'tags'
}
]
})

const post2 = await Post.create({
title: 'title2',
tags: [
{ id: 1, value: 'tag1' }, // Duplicate entry '1' for key 'PRIMARY'
{ id: 3, value: 'tag3' }
]
}, {
include: [
{
model: Tag,
as: 'tags'
}
]
})

const r = await Post.findAll({
include: [
{
model: Tag,
as: 'tags'
}
]
})

console.log(r)
}

main()
.catch((err) => console.error(err))

最佳答案

我想这个关联对你的情况来说已经足够了:

Post.hasMany(Tag, { as: 'tags' })
Tag.belongsToMany(Post, { as: 'postTags', through: 'post_tags' })

关于node.js - 使用多对多关联对 Model.create 进行后续处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60717559/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com