Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

587
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!