Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

592
Visualizações
Secuela 6, eliminar cascada con asociación M:N

Estoy tratando de definir alguna asociación M:N específica usando Sequelize v6.20.1 y me enfrento a un problema...

Tengo 2 modelos, un modelo de Account y un modelo de Group . Mis reglas sobre estos modelos son las siguientes:

  • Una cuenta puede existir sin ningún grupo
  • Una cuenta puede tener varios grupos
  • Un grupo puede existir con al menos una cuenta asociada, lo que significa que un grupo no puede existir sin una cuenta asociada
  • Un grupo se puede asociar con varias cuentas

Aquí está la definición de código de todos los modelos y asociación:

 const Sequelize, { Model, DataTypes } = require('sequelize'); const sequelize = new Sequelize({ dialect: 'sqlite', storage: `./database.sqlite`, }); /* ----- Account model ----- */ class Account extends Model { // Some account's methods definitions... } Account.init({ id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, }, name: DataTypes.STRING, username: DataTypes.STRING, email: DataTypes.STRING, password: DataTypes.STRING, }, { sequelize }); /* ----- Group model ----- */ class Group extends Model { // Some group's methods definitions... } Group.init({ id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, }, name: DataTypes.STRING, }, { sequelize }); /* ----- AccountGroup model ----- */ class AccountGroup extends Model { } AccountGroup.init({ AccountId: { type: DataTypes.INTEGER, references: { model: Account, key: 'id', }, onDelete: 'RESTRICT', }, GroupId: { type: DataTypes.INTEGER, references: { model: Group, key: 'id', }, allowNull: false, onDelete: 'CASCADE', }, }, { sequelize, timestamps: false, }); /* ----- Association definition ----- */ Account.belongsToMany(Group, { through: AccountGroup }); Group.belongsToMany(Account, { through: AccountGroup }); sequelize.authenticate(); sequelize.sync({ force: true }; (async () => { const group = new Group({ name: 'Group' }); await group.save(); const account = new Account({ name: 'Doe', username: 'John', email: 'john.doe@example.com', password: 'secret' }); account.addGroup(group); await account.save(); // some processing code... await account.destroy(); })();

Después de que account.destroy() finaliza, la fila AccountGroup se elimina con éxito, pero no el grupo. Y quiero eliminar grupos sin referencia.

Qué me estoy perdiendo ?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Esta es la forma en que funciona la eliminación en cascada. En su ejemplo, cuando se elimina la cuenta, las filas en la tabla AccountGroup ahora pueden tener un valor no válido en su columna de clave externa AccountId. Le está diciendo a la base de datos que cuando ocurra esta situación, elimine el grupo de cuentas por completo. De manera similar, si elimina un grupo, esto se reducirá en cascada y eliminará cualquier grupo de cuentas con ese grupo como su GroupId.

Este problema no surge para las tablas de cuentas o grupos cuando se elimina un grupo de cuentas. No contienen ninguna clave externa que se haya invalidado.

Para encontrar la funcionalidad que está buscando, eliminando cualquier grupo que ya no pertenezca a un grupo de cuentas, es probable que desee colocar una consulta separada en su código, o puede usar un Hook para ejecutarlo después de que se haya creado una cuenta. eliminado

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda