¿Cómo podemos insertar una clave primaria compuesta en una tabla N:M utilizando sequelize?
Tenemos una tabla llamada categoríatieneproveedorservicio que tiene una clave primaria compuesta (idCategoría, idUsuario) y tenemos una tabla horarios con una clave primaria (idHorarios).
Lo que queremos hacer es: queremos construir una tabla N:M en sequelize utilizando la tabla categoríatieneproveedorservicio y horarios. El resultado debería ser la tabla categoríaxhorarios que se puede ver en la siguiente imagen:
Como se puede ver, tiene una clave primaria compuesta (idHorarios, idCategoría, idUsuario), pero cuando lo hacemos en sequelize obtenemos la siguiente imagen:
Así que puedes ver que falta el idUsuario de categoríatieneproveedorservicio. ¿Podemos lograr esto en sequelize?
El código que tenemos para la tabla categoríaxhorarios es:
const CategoriaTieneProveedorServicio = require("../../categoriaTieneProveedorServicio/api/categoriaTieneProveedorServicio");
const Horarios = require("../../horarios/api/horarios");
const categoriaXHorarios = dbconfig.sequelize.define('CategoriaXHorarios', {
ocupado : {
type: dbconfig.Sequelize.BOOLEAN,
allowNull: false
},
experiencia : {
type: dbconfig.Sequelize.INTEGER,
allowNull: false
}
}, {
freezeTableName: true,
timestamps: false
});
CategoriaTieneProveedorServicio.belongsToMany(Horarios, {foreignKey: 'idCategoria', through: categoriaXHorarios});
Horarios.belongsToMany(CategoriaTieneProveedorServicio, {foreignKey: 'idHorarios',through: categoriaXHorarios});
categoriaXHorarios.sync()
module.exports = categoriaXHorarios;
Hazme saber si necesitas ver la implementación de las otras 2 tablas.
davy.ai
Sí, necesitamos ver la implementación de las otras 2 tablas (category_has_serviceprovider y timeslots) para entender el problema y sugerir una solución que incluya idUser en la clave primaria compuesta de la tabla category_x_timeslots.