Sequelize更新记录及其关联

时间:2016-04-28 16:19:38

标签: mysql sequelize.js

我有一个模型城市,其中有许多城市描述。 我想更新City,但只要数据包含CitiesDescriptions,我希望它们也能更新。 这就是我的数据:

{
  "id": 4263,
  "name": "Accra",
  "country_id": 9,
  "slug": "accra-5",
  "code": "ACD",
  "hdo_code": "",
  "tourico_code": null,
  "active": true,
  "CitiesDescriptions": [
    {
      "id": 1,
      "lang": "es",
      "description": "text text"
    }
  ]
}

因此,在这种情况下,我希望更新CitiesDescriptions中的数据。 如果CitiesDescriptions中的一个对象是新记录(没有ID),我希望它被创建。

无论如何,我还没有找到办法做到这一点,无论我发现什么都失败了。我发现最接近的是:

var city = models.City.build(params, {
    isNewRecord : false,
    include : [models.CitiesDescription]
  });

  Promise.all([
    city.save(),
    city.CitiesDescriptions.map(function (description) {
      if (description.getDataValue('id')) {
        return description.save();
      } else {
        description.city_id = city.id;
        return models.CitiesDescription.create(description.dataValues);
      }
    })
  ]).then(function(results) {
    res.send(results);
  });

除非数据没有CitiesDescriptions键,否则无效。 不过,看起来很复杂,特别是如果明天我有更多的相关模型。

在没有这么麻烦的情况下,有没有办法做到这一点?

编辑:

无法找到解决方案,我做了这个,它按预期工作。

var params = req.body;
  var promises = [];
  promises.push(models.City.update(params, {
    where: {
      id: parseInt(req.params.id)
    }
  }));

  if(params.CitiesDescriptions) {
    promises.push(
      params.CitiesDescriptions.map(function (description) {
        return models.CitiesDescription.upsert(description, {individualHooks: true});
      })
    );
  }

  Promise.all(promises).then(function(results) {
    res.send(results);
  });

0 个答案:

没有答案