gpt4 book ai didi

node.js - Sequelize 中未添加/更新多对多联结表中的额外列

转载 作者:行者123 更新时间:2023-12-03 22:35:47 27 4
gpt4 key购买 nike

这是模型(多对多)

公司.js

module.exports = (sequelize, DataTypes) => {
const Company = sequelize.define('Company', {
company_name: DataTypes.STRING,
}, {
timestamps: true,
underscored: true,
tableName: 'company',
});
Company.belongsToMany(models.Goal, {
through: 'company_goal_relation', foreignKey: 'company_id', as: 'goal'
});
};
return Company;
};

目标.js
module.exports = (sequelize, DataTypes) => {
const Goal = sequelize.define('Goal', {
goal_name: DataTypes.STRING,
}, {
timestamps: false,
underscored: true,
tableName: 'goal',
});
Goal.associate = function(models) {
Goal.belongsToMany(models.Company, {
through: 'company_goal_relation',
foreignKey: 'goal_id',
as: 'company',
});
};
return Goal;
};

公司目标关系.js
'use strict';
module.exports = (sequelize, DataTypes) => {
const CompanyGoalRelation = sequelize.define('CompanyGoalRelation', {
company_id: DataTypes.INTEGER,
goal_id: DataTypes.INTEGER,
objective: DataTypes.STRING,
description: DataTypes.TEXT,
}, {
timestamps: false,
underscored: true,
tableName: 'company_goal_relation',
});

CompanyGoalRelation.associate = function(models) {
CompanyGoalRelation.belongsTo(models.Company, { foreignKey: 'company_id' });
CompanyGoalRelation.belongsTo(models.Goal, { foreignKey: 'goal_id' });
};

return CompanyGoalRelation;
};

我在这里想要的是添加或更新连接表的额外列。
我试过的在下面。
const { goal, companyId } = req.body;
const company = await Company.findByPk(companyId);
const goalInstance = await Goal.findOne({
where: { id: goal.id },
});
await company.addGoal(goalInstance, {
through: {
objective: goal.objective,
description: goal.description,
}
});

没有发生错误,成功添加了 company_id goal_id 目标 描述 仍然是 null

我目前正在使用 Sequelize (5.6.0) 和 PostgreSQL。
有人可以帮忙吗?
谢谢!

最佳答案

所以,正如我所说,我不知道如何在这方面正确配置 Sequelize,我认为这是浪费时间。我会做什么,只是执行一个原始查询。请注意,在您的情况下,您正在对数据库执行完全不必要的查询,首先通过其 ID 获取公司记录,然后执行另一个查询以创建关系(2 个查询而不是 1 个...)

因此,您可以将所需的关系字段(假设从 ajax 请求)传递给您的快速应用程序(假设这是您正在使用的):

const {companyId,goalId,objective,description} = req.body;

然后执行查询:
db.query(`insert into company_goal_relation (company_id,goal_id , objective, description,createdAt,updatedAt) values (?,?,?,?,NOW(),NOW()) `,{
replacements:[companyId,goalId,objective,description]
})

请注意,“db”是您在开始时设置的 Sequelize 对象,您需要从配置/设置文件中导入它。

当然,这不是执行此操作的“正常” Sequelize 方式,但我认为没有理由不应该这样做,然后故事就结束了:D

关于node.js - Sequelize 中未添加/更新多对多联结表中的额外列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60867347/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com