1
我有兩個由belongsToMany關聯關聯的模型。續集家族綜合關聯:創建一個帖子並將其現有標籤關聯起來
Posts.js:
'use strict';
module.exports = function(sequelize, DataTypes) {
var Posts = sequelize.define('Posts', {
title: DataTypes.STRING,
body: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
Posts.belongsToMany(models.Tags, {
through: 'PostsTags',
as:'posts_has_tags',
foreignKey:'postId'
});
}
}
});
return Posts;
};
和Tags.js:
'use strict';
module.exports = function(sequelize, DataTypes) {
var Tags = sequelize.define('Tags', {
name: DataTypes.STRING
},{
classMethods: {
associate: function(models) {
Tags.belongsToMany(models.Posts, {
through: 'PostsTags',
as:'posts_has_tags',
foreignKey:'tagId'
});
}
}
});
return Tags;
};
在我的分貝我得到2個現有的標籤。 (id:1和id:2) 我在創建帖子時遇到了麻煩,我想將它與其中一個標籤關聯。
通過運行此代碼:
create: function(request, reply){
let post = Object.assign({}, request.payload, request.params);
models.Posts.create({
title: post.title,
body: post.body,
posts_has_tags: [{tagId:1}]
},{
include: [{model:models.Tags, as:'posts_has_tags'}]
}).then(function(newPost){
if(!newPost){
return reply('[404] Not found').code(404);
}
reply(newPost).code(200);
})
}
運行此查詢:
INSERT INTO `Posts` (`id`,`title`,`body`,`createdAt`,`updatedAt`) VALUES (DEFAULT,'TITLE 1','BODY 1','2017-02-05 18:33:21','2017-02-05 18:33:21');
Executing (default): INSERT INTO `Tags` (`id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,'2017-02-05 18:33:21','2017-02-05 18:33:21');
Executing (default): INSERT INTO `PostsTags` (`createdAt`,`updatedAt`,`postId`,`tagId`) VALUES ('2017-02-05 18:33:21','2017-02-05 18:33:21',70,20);
- 它創建了一個新的職位,但也是我不希望有一個新的標籤。
- 它創造了poststags表,但用不好的標籤ID
- 在承諾如何訪問到setAssociation()或addAssocation()方法sequelize(剛創建的id爲1,而不是之一)的關聯應該創建於belongsToMany協會:
我有錯誤或不確定的,如果我嘗試newPost.addTags或newPost.setTags,或models.Posts.addTags或models.Posts.setTags
如果有人能幫助我,他很受歡迎。 我堅持了這幾天,我想明白我怎麼可以使用sequelize最佳的方式。
setPostHasTags會返回一個承諾,對吧?在回覆之前,你應該包含一個then()。 –