我尝试创建一个标签id和tag相关标签的关联表,所以首先我做一个findOrCreate标签,这个功能是可操作的并且工作正常,但是当我做了一个then(function(result){和)结果我创建我的关联标签的id像result.id返回的id为null!所以在我做一个简单的创建的情况下,它返回一个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))
})
}))
}
}
这是我的标签控制器:
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;
}
我阅读了文档,并且我在我的标记控制器中测试了这个:
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,它只返回错误的结果(已经存在于数据库中的那个)...有一些我不理解的东西
答案 0 :(得分:0)
似乎我们不能直接返回传播的结果,所以我不得不把它推回到回调中。这是我的最终代码:
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))
}
})