Sequelize - 通过表格销毁多对多关系的记录

时间:2017-07-08 17:55:23

标签: sequelize.js

我有一个场景,我试图从具有多对多关系的表中删除记录,以及连接我的两个表的联结(通过)表中的匹配recordId。我知道有setget方法为一个表创建记录,然后在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]

1 个答案:

答案 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
   }
});