Sequelize,在findOrCreate之后得到id

时间:2018-05-09 11:10:18

标签: javascript express sequelize.js unique

我尝试创建一个标签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,它只返回错误的结果(已经存在于数据库中的那个)...有一些我不理解的东西

1 个答案:

答案 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))
                    }  
                 })