Tengo la siguiente definición de secuela de una tabla:
AcademyModule = sequelize.define('academy_module', { academy_id: DataTypes.INTEGER, module_id: DataTypes.INTEGER, module_module_type_id: DataTypes.INTEGER, sort_number: DataTypes.INTEGER, requirements_id: DataTypes.INTEGER }, { freezeTableName: true }); Como puede ver, no hay una columna de id en esta tabla. Sin embargo, cuando intento insertarlo, todavía intenta el siguiente sql:
INSERT INTO `academy_module` (`id`,`academy_id`,`module_id`,`sort_number`) VALUES (DEFAULT,'3',5,1); ¿Cómo puedo deshabilitar la función de id que claramente tiene?
Si no define una primaryKey , la secuencia utiliza la id de forma predeterminada.
Si desea establecer el suyo propio, simplemente use primaryKey: true en su columna.
AcademyModule = sequelize.define('academy_module', { academy_id: { type: DataTypes.INTEGER, primaryKey: true }, module_id: DataTypes.INTEGER, module_module_type_id: DataTypes.INTEGER, sort_number: DataTypes.INTEGER, requirements_id: DataTypes.INTEGER }, { freezeTableName: true });Si desea deshabilitar por completo la clave principal de la tabla, puede usar Model.removeAttribute . Tenga en cuenta que esto podría causar problemas en el futuro, ya que Sequelize es un ORM y las uniones necesitarán una configuración adicional.
const AcademyModule = sequelize.define('academy_module', { academy_id: DataTypes.INTEGER, module_id: DataTypes.INTEGER, module_module_type_id: DataTypes.INTEGER, sort_number: DataTypes.INTEGER, requirements_id: DataTypes.INTEGER }, { freezeTableName: true }); AcademyModule.removeAttribute('id');Para una clave principal compuesta, debe agregar "primaryKey: true" a todas las columnas que forman parte de la clave principal. Sequelize considera que tales columnas son parte de una clave principal compuesta.