我在Sequelize中有一个控制器用于多对多表。以前,我的控制器看起来像这样:
const Card = require('../models').card;
const Tag = require('../models').tag;
const CardTag = require('../models').card_tag;
module.exports = {
create(req, res) {
Promise.all([
Card.create({title: req.body.card.title, link: req.body.card.link}),
Tag.create({title: req.body.tag.title})
])
.then(([Card, Tag]) => CardTag.create({cardId: Card.id, tagId: Tag.id}))
.catch(error => res.status(400).send(error));
}
但是,我现在正在构建我的控制器,以便它可以处理单个卡和一组标签。但是,当我尝试创建此控制器时,我尝试在连接表中创建一行时返回某些未定义的值(tag.id)。我该怎么做呢? (请参阅下面的代码)。谢谢!
const Card = require('../models').card;
const Tag = require('../models').tag;
const CardTag = require('../models').card_tag;
module.exports = {
create(req, res) {
Promise.all([
Card.create({title: req.body.card.title, link: req.body.card.link}),
req.body.tags.map(tag =>
Tag.create({title: tag.title})
)
])
.then(([Card, Tags]) =>
// How do I properly create a row in the CardTag table? I am having
// difficulty getting back tag.id and am right now just returning
// an undefined value.
Tags.map(tag =>
CardTag.create({cardId: Card.id, tagId: tag.id})
)
)
.catch(error => res.status(400).send(error));
}
};
答案 0 :(得分:1)
您的代码中的问题是Promise.all
中的循环,因为它没有返回任何内容,这就是为什么您没有在.then()
中获得结果
您可以bulkCreate
使用create
而非Tag
:
module.exports = {
create(req, res) {
Promise.all([
Card.create({title: req.body.card.title, link: req.body.card.link}),
Tag.bulkCreate(req.body.tags); // <------- Make Change Here --------
])
.then(([Card, Tags]) =>
Tags.map(tag =>
CardTag.create({cardId: Card.id, tagId: tag.id})
)
)
.catch(error => res.status(400).send(error));
}
};