sequelize table sans colonne 'id'
j'ai le texte suivant sequelize définition 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 voir il n'y a pas un id
colonne de ce tableau. Cependant lorsque j'essaie d'insérer, il tente encore le sql suivant:
INSERT INTO `academy_module` (`id`,`academy_id`,`module_id`,`sort_number`) VALUES (DEFAULT,'3',5,1);
Comment puis-je désactiver l' id
fonction qu'il a clairement?
4 réponses
Si vous ne définissez pas un primaryKey
puis sequelize utilise id
par défaut.
Si vous souhaitez définir votre propre, il suffit d'utiliser 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
});
pour une clé primaire composite, vous devez ajouter "primaryKey: true" à toutes les colonnes de la clé primaire. Sequelize considère que ces colonnes font partie d'une clé primaire composite.
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 joins aura besoin de 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');
si votre model n'a pas de colonne ID, vous pouvez utiliser Model.removeAttribute ("id"); pour se débarrasser de lui.
voir http://docs.sequelizejs.com/en/latest/docs/legacy/
Donc dans votre cas il 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:
On dirait que tu fais une table commune. Envisagez de faire academy_id
etmodule_id
les clés primaires. De cette façon, le même lien ne pourra pas apparaître plusieurs fois, et la base de données ne créera pas une colonne d'identification cachée en vain.