【发布时间】:2018-05-09 11:10:18
【问题描述】:
我尝试用标签的 id 和相关文章的 id 创建一个关联的标签表,所以首先我做了一个 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,它只返回错误的结果(数据库中已经存在的结果)...有一些我不明白的东西
【问题讨论】:
-
能否请您格式化一下您的代码。并提供您迄今为止尝试过的内容。
-
我已经编辑了我的帖子
标签: javascript express sequelize.js unique