创buildhasMany关联的元素

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

当前的行为:两个用户都是使用所有属性创build的,根本不创buildpost,也没有给出错误。

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 ,然后它也不工作。 只有当定义和密钥是相同的,它的工作。

奇怪的是,在续集的文档中,他们确实像你一样有一个小写的大写字母不规则。 难道是他们犯了一个错字吗? 他们还用小写字母t来定义“tag”,而不是大写字母T.

我修改了你的代码,以便它能用他们的教程代码工作,但事实并非如此。 当我进行我的build议更改时,它确实有效 – 将定义中的小写字母更改为大写字母。 然而,他们在定义标签的方式上有一些不同的方式。 他们有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))