【问题标题】:Sequelize - Destroy Records with Many to Many Relationship and Through TableSequelize - 销毁具有多对多关系和通过表的记录
【发布时间】:2017-12-12 20:08:58
【问题描述】:

我有一个场景,我试图从具有多对多关系的表中删除一条记录,以及连接我的两个表的联结(通过)表中的匹配 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 别名为驼峰大小写,这就是错误消息与关联中提到的列不同的原因。

我正在尝试在user 表上使用销毁命令,其中任何用户都与与当前用户会话相关联的组织相关联。不幸的是,以下命令不起作用,因为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]

【问题讨论】:

    标签: sequelize.js


    【解决方案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
       }
    });
    

    【讨论】:

    • 感谢您的回答。 1)两者。我正在尝试删除关联,然后这些用户是已删除关联的一部分。此方法是从我的应用程序中删除帐户的更大操作链的一部分。 2) 好电话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多