j'ai la définition suivante d'une table:
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});
Comme vous pouvez le constater, il n'y a pas de colonne id
dans ce tableau. Cependant, lorsque j'essaie de l'insérer, il essaie toujours le SQL suivant:
INSERT INTO `academy_module` (`id`,`academy_id`,`module_id`,`sort_number`) VALUES (DEFAULT,'3',5,1);
Comment puis-je désactiver la fonction id
dont il dispose clairement?
Si vous ne définissez pas un primaryKey
alors séquençage utilise id
par défaut.
Si vous voulez définir le vôtre, utilisez simplement primaryKey: true
sur votre colonne.
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 vous souhaitez désactiver complètement la clé primaire de la table, vous pouvez utiliser Model.removeAttribute
. Soyez averti que cela pourrait causer des problèmes à l'avenir, car Sequelize est un ORM et les jointures nécessiteront une configuration supplémentaire.
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');
Pour une clé primaire composite, vous devez ajouter "primaryKey: true" à toutes les colonnes faisant partie de la clé primaire. Sequelize considère que ces colonnes font partie d’une clé primaire composite.
Si votre modèle ne possède pas de colonne ID, vous pouvez utiliser Model.removeAttribute ('id'); s'en débarasser.
Voir http://docs.sequelizejs.com/en/latest/docs/legacy/
Donc dans votre cas ce serait
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');
Remarque: Vous semblez créer une table de jointure. Envisagez de faire academy_id
etmodule_id
clés primaires. Ainsi, le même lien ne pourra pas apparaître plusieurs fois et la base de données ne créera pas de colonne d'identifiant masqué en vain.