NodeJS 使用关联序列化更新

gzjq41n4  于 2023-06-22  发布在  Node.js
关注(0)|答案(2)|浏览(125)

我有两个模型,用户和商人。我将从UI发送JSON数据。在Sequelize中,我使用了“include”选项来插入数据,如下所示。

models.user.create(req.body, { include: [models.merchant] });

它正如预期的那样工作得很好。所以我试着像下面这样更新数据。

var filter = {
            where: { id: id },
            include: [
                models.merchant
            ]
        };

models.user.update(req.body, filter);

上面的代码只更新用户数据。关联在更新中不起作用。我不知道这有什么问题。
请任何人帮助解决这个问题。
先谢谢你了。

uqxowvwt

uqxowvwt1#

您所要求的行为根本无法通过一次更新调用来完成。如果你检查文档中的更新功能,没有包含选项,即sequelize只能为调用更新函数的模型的表构建更新查询。
您必须单独更新关联。我建议您将这些更新放在一个事务中,以避免同时发生对同一对象的多个更新的任何问题。

yuvru6vn

yuvru6vn2#

这里有一个干净的方法来做到这一点:

const { Sequelize, DataTypes } = require("sequelize");
const {
  extendSequelize,
} = require("@hatchifyjs/sequelize-create-with-associations");

(async function main() {
  // create your Sequelize instance
  const sequelize = new Sequelize("sqlite::memory:", {
    logging: false,
  });

  // define your models
  const Merchant = sequelize.define("Merchant", {
    id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
    name: DataTypes.STRING,
  });

  const User = sequelize.define("User", {
    id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
    firstName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    merchantId: DataTypes.INTEGER,
  });

  Merchant.hasOne(User, {
    as: "user",
    foreignKey: "merchantId",
  });

  User.belongsTo(Merchant, {
    as: "merchant",
    foreignKey: "merchantId",
  });

  // create the tables
  await sequelize.sync();

  // extend Sequelize
  await extendSequelize(Sequelize);

  await Merchant.create({
    name: "Old Merchant",
    user: {
      firstName: "az",
      lastName: "rnd",
    },
  });

  const newMerchant = await Merchant.create({
    name: "New Merchant",
  });

  await User.update(
    { lastName: "Updated", merchant: { id: newMerchant.id } },
    { where: { id: 1 } }
  );
})();

相关问题