在Node.js sequelize和PostgreSQL中创建/更新多对多关联

在Node.js sequelize和PostgreSQL中创建/更新多对多关联,sql,node.js,postgresql,sequelize.js,Sql,Node.js,Postgresql,Sequelize.js,我只是创建或更新一个与另一个表有多对多关联的表,如下所示: 公司-行业-公司-行业关系 Industry.js 'use strict'; module.exports = (sequelize, DataTypes) => { const Industry = sequelize.define('Industry', { industry_name: DataTypes.STRING, }, { timestamps: false, underscored

我只是创建或更新一个与另一个表有多对多关联的表,如下所示: 公司-行业-公司-行业关系

Industry.js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Industry = sequelize.define('Industry', {
    industry_name: DataTypes.STRING,
  }, {
    timestamps: false,
    underscored: true,
    tableName: 'industry',
  });
  Industry.associate = function(models) {
    Industry.belongsToMany(models.Company, {
      through: 'company_industry_relation', foreignkey: 'industry_id'
    });
  };
  return Industry;
};
Company.js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Company = sequelize.define('Company', {
    company_name: DataTypes.STRING,
  }, {
    timestamps: false,
    underscored: true,
    tableName: 'company',
  });
  Company.associate = function(models) {
    Company.belongsToMany(models.Industry, {
      through: 'company_industry_relation', foreignKey: 'company_id'
    });
  };
  return Company;
};
CompanyIndustryRelation.js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const CompanyIndustryRelation = sequelize.define('CompanyIndustryRelation', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
    },
  }, {
    timestamps: false,
    underscored: true,
    tableName: 'company_industry_relation',
  });
  return CompanyIndustryRelation;
};
目前我已经建立了如下所示的行业表。

工业阵列 行业=[{标签:“会计”},{标签:“计算机科学”}]

公司名称:“阿波罗”

我想用给定的行业数组和companyName创建一个新的公司记录


提前谢谢

好的。就我所见,您的模型定义不正确。在sequelize中,您创建一个与数据库表相关的模型,通常,该模型必须与数据库表相同

对于Industry.js,您只需定义Industry_name列,而忘记了id。Company.js也是如此。如果sequeliaze不知道主键。。。它不好用

在CompanyIndustryRelation.js中,通常不需要id,因为主键通常是相关表id。在这种情况下,它应该是行业id和公司id。同样,在CompanyIndustryRelation.js中没有此类字段

使用n到n关系时,首先需要创建主表。如果您有:


company-->CompanyIndustryRelation我找到了一种创建/更新关联记录的简单方法

industries: [ 
 { value: 'Gaming', label: 'Gaming' },
 { value: 'Computer Science', label: 'Computer Science' } 
]


请参考这里

你的问题不清楚。请说得更具体些。如果您展示一个数据示例以及您想要实现的目标,这会更好。与您的关系,我只能看到公司->公司行业关系丹,谢谢回复!刚刚更新了问题。Dan,我已经试过这样做,用于行业的const I{const industrystance=wait industry.findOne{industry\u name:I.label};wait CompanyIndustryRelation.create{company\u id:company.id,industry\u id:industrystance.id}但是它说的是关系公司和行业的错误id不存在。谢谢你的回答,顺便问一下。有没有办法使用async Wait?事务的使用是必须且必须的?在链接事务中是sequelize手册,以及如何将其与wait.TypeError一起使用:_sequelize.default.transaction不是函数,在哪里可以引用sequelize?很遗憾,它不起作用,仍然说关系公司\行业\关系的列id不存在,我尝试了const t=wait db.sequelize.transaction;const company=wait company.create{company_name:companyName},{transaction:t};对于const industry of industries{const industryInstance=await industry.findOne{industry_name:industry.label};await company industry Relation.create{company_id:company.id,industry_id:industryInstance.id},{事务处理:t};await t.commit;}但它不起作用
industries: [ 
 { value: 'Gaming', label: 'Gaming' },
 { value: 'Computer Science', label: 'Computer Science' } 
]

const company = await Company.create({
   company_name: companyName,
});

const industry = await Industry.findAll({
   where: { industry_name: { [Op.in]: _.map(industries, o => o.label) } }
});
await company.addIndustry(industry);