gpt4 book ai didi

javascript - 创建 hasMany 关联的元素

转载 作者:搜寻专家 更新时间:2023-10-31 23:20:16 24 4
gpt4 key购买 nike

第一次问 Stack Overflow 问题,所以我希望我的措辞正确:我正在尝试构建一个简单的博客应用程序作为家庭作业,同时使用 Sequelize 进行数据库管理。但是,当我尝试创建与我的模型关联的元素时,我在尝试创建一些测试数据时遇到了问题。这是我的代码,它应该与文档中的语法相同(http://docs.sequelizejs.com/en/v3/docs/associations/#creating-elements-of-a-hasmany-or-belongstomany-association)。

当前行为:两个用户都创建了所有属性,根本没有创建帖子,也没有给出错误。

masterdb.sync({force:true}).then( x => {
return Promise.all([
User.create({
username:'Timothy',
password:'plain-text',
email:'x@msn.nl',
Posts: [
{ body: 'Hello everyone, my name is Timothy.' },
{ body: 'Today was a good day.'}
]
}, {
include: [ Post ]
}),
User.create({
username:'Jack Sparrow',
password:'plain-text',
email:'jacksparrow@msn.nl'
}),
])
}).catch(x => console.log(x))

这是我的模型和关系声明:

const Sequelize = require('sequelize')
const masterdb = new Sequelize('blogapplication', process.env.POSTGRES_USER, process.env.POSTGRES_PASSWORD, {
dialect: 'postgres',
})
const User = masterdb.define('user', {
username: {
type: Sequelize.STRING,
unique: true,
allowNull: false
},
password: {
type: Sequelize.STRING,
allowNull: false
},
email: {
type: Sequelize.STRING,
unique: true,
allowNull: false
}
}, {
paranoid: true
})

const Post = masterdb.define('post', {
body: {
type: Sequelize.STRING(9001),
allowNull: false,
unique:true,
}
}, {
paranoid: true
})

User.hasMany(Post)

最佳答案

摆弄您的代码和以下作品。我对 Sequalize 一无所知,所以不知道它是否应该像这样工作。但它有效:)

            posts: [
{ body: 'Hello everyone, my name is Timothy.' },
{ body: 'Today was a good day.'}
]

你有:

        Posts: [
{ body: 'Hello everyone, my name is Timothy.' },
{ body: 'Today was a good day.'}
]

你看出区别了吗?

我也有一段时间没有,但你有一个大写字母 P 而我有一个小写字母 p

输出:

testdb=# select * from users; 
id | username | password | email | createdAt | updatedAt | deletedAt
----+--------------+------------+--------------------+----------------------------+----------------------------+-----------
1 | Jack Sparrow | plain-text | jacksparrow@msn.nl | 2016-11-17 22:38:06.493+01 | 2016-11-17 22:38:06.493+01 |
2 | Timothy | plain-text | x@msn.nl | 2016-11-17 22:38:06.492+01 | 2016-11-17 22:38:06.492+01 |
(2 rows)

testdb=# select * from posts;
id | body | createdAt | updatedAt | deletedAt | userId
----+-------------------------------------+----------------------------+----------------------------+-----------+--------
1 | Hello everyone, my name is Timothy. | 2016-11-17 22:38:06.515+01 | 2016-11-17 22:38:06.515+01 | | 2
2 | Today was a good day. | 2016-11-17 22:38:06.515+01 | 2016-11-17 22:38:06.515+01 | | 2
(2 rows)

编辑:我想我知道为什么必须小写了。

您定义的帖子如下:

const Post = masterdb.define('post', {

如果你想按照自己的方式去做,你必须用大写的 P 来定义它。

我认为这是您问题的原因,因为我尝试将帖子定义为 Post 并将键定义为 post 然后它也不起作用。仅当定义和 key 相同时才有效。

奇怪的是在 docs of sequelize他们确实像您一样有小写大写字母的不规则性。难不成是他们打错了?他们还用小写字母 t 代替大写字母 T 定义了“标签”。

我调整了您的代码,使其“应该”适用于他们的教程代码,但事实并非如此。当我进行我提议的更改时它确实起作用了——将定义中的小写字母更改为大写字母。但是,它们在定义标签的方式上确实略有不同。他们有 var Tag = this.sequelize.definte('tag', {

而您需要 var Tag = masterdb.define('tag', {

会不会是因为 this.sequelize 而他们的代码也可以工作?

这是您的代码以及他们教程代码的工作版本。我将数据库重命名为 testdb 并为我更改的相关行添加了注释:

const Sequelize = require('sequelize')
const masterdb = new Sequelize('testdb', process.env.POSTGRES_USER, process.env.POSTGRES_PASSWORD, {
dialect: 'postgres',
})
const User = masterdb.define('user', {
username: {
type: Sequelize.STRING,
unique: true,
allowNull: false
},
password: {
type: Sequelize.STRING,
allowNull: false
},
email: {
type: Sequelize.STRING,
unique: true,
allowNull: false
}
}, {
paranoid: true
})

var Tag = masterdb.define('Tag', { //this is 'tag' in their tutorial
name: Sequelize.STRING
}, {
paranoid: true
})

User.hasMany(Tag)

masterdb.sync({force:true}).then( x => {
return Promise.all([
User.create({
username:'Timothy',
password:'plain-text',
email:'x@msn.nl',
Tags: [
{ name: 'Alpha'},
{ name: 'Beta'}
]
}, {
include: [ Tag ]
}),
User.create({
username:'Jack Sparrow',
password:'plain-text',
email:'jacksparrow@msn.nl'
}),
])
}).catch(x => console.log(x))

关于javascript - 创建 hasMany 关联的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40655459/

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