javascript - Sequelize ,在 findOrCreate 后获取 id

标签 javascript express sequelize.js unique

我尝试创建一个带有标签 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/

相关文章:

javascript - node.js express,一个非常奇怪的行为

javascript - 将 sql 查询转换为 sequelize

sequelize.js - Sequelize : How to reverse query in hasMany?

javascript - d3 的双指缩放在 IE/Edge 中不起作用?

JavaScript 原型(prototype)继承 - 函数未呈现正确的警报

javascript - 多级菜单

node.js - 使用 Yeoman/Grunt 设置 Jade 进行模板化的正确方法

node.js - heroku 给我方法不允许

node.js - 类方法中的 Sequelize Association 不起作用

javascript - 使用单选按钮触发链接