我尝试创建一个带有标签 ID 和相关文章 ID 的关联标签表,所以首先我做一个 findOrCreate 标签,这个函数是可操作的并且运行良好,但是当我执行 then(function(result){}) 和结果我创建了我与标签的 id 的关联,如 result.id 返回的 id 为空!因此,在我执行简单创建的情况下,它会返回一个 id,但是当我执行 findOrCreate 时,该 id 为 null !我该怎么做才能使用 findOrCreate 函数获取我创建的条目的 ID?如果有另一种解决方案来创建一个尚不存在的条目,我也很感兴趣……这是我在 app.js 中的函数
function(sales, callback) {
if(req.body.tags) {
tagsArray = req.body.tags.split(',');
var obj = tagsArray.reduce(function(acc, cur, i) {
acc[i] = cur;
return acc;
}, {});
callback(null, async.forEachOf(obj, (value,key,callback) => {
tagsFormattedArray.push({tags: value})
tagsController.create(req, res, value).then(function(result){
callback(null, tagSpottingController.create(req, res, result.id, idCreation))
})
}))
}
}
这是我的标签 Controller :
module.exports = {
create(req, res, tag) {
return Tags
.findOrCreate({
where: {
name: tag
},
defaults: {
name: tag
}
})
}
};
这是我的标签模型:
module.exports = (sequelize, DataTypes) => {
const Tags = sequelize.define('Tags', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
name: {
type: DataTypes.STRING
},
createdAt: {
type: DataTypes.DATE,
field: 'createdAt'
},
updatedAt: {
type: DataTypes.DATE,
field: 'updatedAt'
}},{
timestamps: true
});
return Tags;
}
我阅读了文档,并在我的标签 Controller 中进行了测试:
module.exports = {
findOrCreate(req, res, tag) {
return Tags
.findOrCreate({
where: {
name: tag
},
defaults: {
name: tag
}
}).spread((tags, created) => {
console.log(tags.get({
plain: true
}))
})
}
};
它控制台记录我创建的所有标签(那些不在数据库中的标签)我想要的行为!...但是当我尝试返回而不是控制台日志时,为了获取我的 ID,它只返回我错误的结果(数据库中已经存在的结果)……有些我不明白
最佳答案
似乎我们不能直接返回点差的结果,所以我不得不将它推送到回调中。这是我的最终代码:
tagsController.findOrCreate(req, res, value).spread(function(tags, created){
if (created){
callback(null, tagSpottingController.create(req, res, tags.id, idCreation))
}
else {
callback(null, tagSpottingController.create(req, res, tags.id, idCreation))
}
})
关于javascript - Sequelize ,在 findOrCreate 后获取 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50251952/