Sequelize模型关联更新未按预期反映

时间:2019-01-07 21:35:51

标签: javascript node.js sequelize.js

我正在尝试通过sequelize的set<Model>(...)方法将标签与组织关联,这似乎在db中正确设置了标签,但是使用这些新标签的更新后的组织并不能反映这一点。

组织模型

'use strict';
module.exports = (sequelize, DataTypes) => {
  var organization = sequelize.define('organization', {
  ...
  }, {});
  organization.associate = function (models) {
    // associations can be defined here
    organization.hasMany(models.tag)
  };
  return organization;
};

标签模型

'use strict';
module.exports = (sequelize, DataTypes) => {
  ...
  tags.associate = function(models) {
    // associations can be defined here
    tags.belongsTo(models.organization)
  };
  return tags;
};

方法

/**
 * Update organization
 * @param {object} db     - The db handle
 * @param {object} stats  - The datadog client
 */
function updateOrganization(db, stats) {
  return function (req, res) {

    let tagsToAdd = []
    let tagsToDelete = []
    let myOrg

    db.organization.findOne({
      where: {
        id: req.params.id
      },
      include: ['tags', 'users', 'retrievals']
    })
      .then(org => {
        myOrg = org
        return org.getTags()
      })
      .then(tags => {
        let promises = []

        ...a bunch of irrelevant logic

        // Add all the new tags
        tagsToAdd.forEach(tag => {
          promises.push(myOrg.createTag({ name: 'newTag' }))
        })

        return Promise.all(promises)
      })
      .then(updatedOrg => {
        console.log('updatedOrg = ', updatedOrg) <-- Does NOT have tags in updated org output even though they actually exist in db. Why not???
        return res.status(HttpStatus.OK).send(updatedOrg)
      })
  }
}

1 个答案:

答案 0 :(得分:0)

在无数小时地将我的头骨砸向附近的东西之后,我终于发现我需要打电话给reload()

.then(updatedOrg => {
  console.log('updatedOrg = ', updatedOrg)
  return res.status(HttpStatus.OK).send(updatedOrg)
})

应该是

.then(updatedOrg => {
  return myOrg.reload()
})
.then(updatedOrg => {
  return res.status(HttpStatus.OK).send(updatedOrg)
})