我有一个场景,我试图从具有多对多关系的表中删除记录,以及连接我的两个表的联结(通过)表中的匹配recordId。我知道有set
和get
方法为一个表创建记录,然后在through
表中自动创建关系,但有没有办法delete
?
这是关系:
用户
User.belongsToMany(db.Organization, { through: 'organization_member', foreignKey: 'user_id'})
组织
Organization.belongsToMany(db.User, { through: 'organization_member', foreignKey: 'organization_id'})
请注意,Sequelize对foreignKey的别名是camel case,这就是错误消息与协会中提到的列不同的原因。
我试图在user
表上使用destroy命令,其中任何用户都与当前用户会话关联的组织相关联。不幸的是,以下命令不起作用,因为organization_id
表上没有user
,而organization_member
联结表不存在。有人可以帮忙吗?
deleteUsers: function(organizationId, t){
console.log("Step 10: Delete Users");
//DELETE users
return models.User.destroy({
where: {
organizationId: organizationId
}
},{ transaction: t })
}
错误:
{ [SequelizeDatabaseError: column "organizationId" does not exist]
答案 0 :(得分:1)
你有两个问题
1)您尝试按组织ID删除用户,但您的用户没有organization_id
列,organization_member
表包含该列。您是要删除用户和组织的关联,还是试图删除用户?
2)你在列名上与Sequelize战斗。我认为你最好的选择是将Sequelize配置为仅对所有外键使用下划线或驼峰外壳。这样你就不必担心总是过度统治它。
这是我的配置:
const db = module.exports = new Sequelize(url, {
dialect: 'postgres',
define: {
underscored: true, // use snake_case rather than camelCase column names
freezeTableName: true, // don't change table names from the one specified
timestamps: true, // automatically include timestamp columns
}
});