Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

326
Vistas
¿Por qué Sequelize está invirtiendo la consulta INSERT que produce llamando al método N:N personalizado?

Buenas noches.

Tengo una base de datos con la siguiente asociación N:N:

-> BlogPost.belogsToMany(Categoría a través de: PostsCategories)

-> Category.belongsToMany(BlogPost a través de: PostsCategories)

PostsCategories es el modelo de la tabla de unión.

En el proceso de insertar un BlogPost en la base de datos, tengo que catalogar en qué categorías se encuentra en la tabla de conexiones. Entonces, siguiendo algunos ejemplos en la documentación que se me ocurrió:

 const blogPost = await BlogPost.create({ title, content, userId }); await blogPost.addCategories(categoriesList);

Hasta aquí todo bien, pero hubo un error. Básicamente, Sequelize está invirtiendo el orden en las columnas/valores al escribir la consulta. si agrego

 blogPost: { id: 3, categories: [1, 2] }

produce esta consulta:

 "'INSERT INTO `PostsCategories` (`categoryId`,`postId`) VALUES (3,1),(3,2);'"

Está invertido y he intentado un montón de cosas y no funciona. :(

Tiene alguna idea sobre esto?

¡Gracias!

EDITAR: MIS MODELOS

 module.exports = (sequelize, DataTypes) => { const Category = sequelize.define('Category', { name: DataTypes.STRING, }, { tableName: 'Categories', timestamps: false }); Category.associate = (models) => { const { BlogPost, PostsCategories } = models; Category.belongsToMany( BlogPost, { through: PostsCategories, foreignKey: 'postId', as: 'blogPosts' }, ); }; return Category; }; module.exports = (sequelize, DataTypes) => { const BlogPost = sequelize.define('BlogPost', { title: DataTypes.STRING, content: DataTypes.STRING, userId: DataTypes.INTEGER, }, { tableName: 'BlogPosts', timestamps: true, createdAt: 'published', updatedAt: 'updated' }); BlogPost.associate = (models) => { const { User, PostsCategories, Category } = models; BlogPost.belongsToMany( Category, { through: PostsCategories, foreignKey: 'categoryId', as: 'categories' }, ); BlogPost.belongsTo(User, { foreignKey: 'userId', as: 'user' }); }; return BlogPost; }; module.exports = (sequelize, _DataTypes) => { const PostsCategories = sequelize.define('PostsCategories', {}, { timestamps: false, tableName: 'PostsCategories' }); return PostsCategories; };
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Recibí mi respuesta. Jajaja.

Mis declaraciones de asociación eran defectuosas.

 BlogPost.belongsToMany( Category, { through: PostsCategories, foreignKey: 'categoryId', as: 'categories' }, );

En realidad, ForeignKey está relacionado con BlogPost en la tabla de unión.

También invertí mi declaración para poder "leerla" mejor.

 BlogPost.belongsToMany( Category, { as: 'categories', through: PostsCategories, foreignKey: 'postId' }, );

BlogPost pertenece a muchos Categoría

  • si consulto un BlogPost y lo quiero con cada categoría, volverá como 'categorías'
  • la asociación se establece a través de PostsCategories
  • la forma en que BlogPost se asocia con PostsCategories es con la clave extranjera 'postId'
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda