javascript - 使用 id 时如何使用 Sequelize 创建关联?

标签 javascript node.js sequelize.js

我有一个 warmup 和一个 warmup_step 。我正在尝试创建一个 warmup with an association
但是,当我尝试创建时,它不会将 warmup_id 映射到 warmup_step 。我究竟做错了什么?

// Warmup

module.exports = (sequelize, DATATYPES) => {
  const Warmup = sequelize.define(
    "warmup",
    {
      duration: { type: DATATYPES.INTEGER, allowNull: false },
      name: { type: DATATYPES.STRING, allowNull: false },
    },
    { underscored: true }
  );

  // Assign an associate function on the model
  Warmup.associate = function (models) {
    models.Warmup.hasMany(models.WarmupStep);
  };

  return Warmup;
};

// Warmup Step

module.exports = (sequelize, DATATYPES) => {
  const WarmupStep = sequelize.define(
    "warmup_step",
    {
      duration: { type: DATATYPES.INTEGER, allowNull: false }, // seconds
      exercise_id: { type: DATATYPES.INTEGER, allowNull: false },
      warmup_id: { type: DATATYPES.INTEGER, allowNull: false }, // Map to parent Warmup.
      step_index: { type: DATATYPES.INTEGER, allowNull: false }, // position in warmup.
    },
    { underscored: true }
  );

  // Assign an associate function on the model
  WarmupStep.associate = function (models) {
    models.WarmupStep.belongsTo(models.Warmup, { foreignKey: "warmup_id" });
  };

  return WarmupStep;
};

创建函数:

  Warmup.create(
    {
      name,
      duration,
      warmup_steps,
    },
    {
      include: [WarmupStep],
    }
  )
    .then((data) => res.send(data))
    .catch((err) => {
      console.log("here");
      console.log(err);
    });

我希望创建 warmup ,然后将 id 用于 warmup_steps ,但它给了我错误 message: 'warmup_step.warmup_id cannot be null' 。我认为这就是使用关联创建为您所做的事情?或者我必须在两个电话中做到这一点?

最佳答案

您还应该在 hasMany 关联中指明 warmup_id :

models.Warmup.hasMany(models.WarmupStep, { foreignKey: "warmup_id" });

关于javascript - 使用 id 时如何使用 Sequelize 创建关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61920947/

相关文章:

node.js - 无论有足够的可用空间,npm 都不会安装任何软件包

node.js - Azure 函数 TypeScript 装饰器

javascript - 从两个表中获取值。 - Sequelize

javascript - VueJS : Loop through JSON-object

javascript - React 中循环对象数组的问题

javascript - 仅在Mac以外的设备上添加子菜单项: Electron JS

linux top -Hp [PID] 显示 Node 进程有4个 Node 线程和4个v8工作线程

mysql - Sequelize 查询调用过程触发两次

mysql - Sequelize MariaDB - 插入表情符号字符

javascript - Angular 表达式不适用于 html