在Node.js sequelize和PostgreSQL中创建/更新多对多关联
我只是创建或更新一个与另一个表有多对多关联的表,如下所示: 公司-行业-公司-行业关系 Industry.js在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
'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);