Sequelize crée généralement une nouvelle colonne pour les clés étrangères lors de l'utilisation de l'association AppartientTo(). Cependant, dans certains scénarios, cela peut ne pas le faire.
Un de ces scénarios est décrit dans le modèle utilisateur fourni, où Sequelize ne parvient pas à créer la colonne role_id. Cela soulève des inquiétudes et de la confusion, surtout lorsque d'autres modèles du même projet présentent le comportement attendu.
La solution réside dans la centralisation de l'enregistrement de tous les modèles et de leurs associations dans un seul endroit. Cela garantit que Sequelize peut établir les relations appropriées entre les modèles.
// database.js const fs = require('fs'); const path = require('path'); const Sequelize = require('sequelize'); const db = {}; const sequelize = new Sequelize(/* your connection settings here */); const models = path.join(__dirname, 'models'); fs.readdirSync(models).filter(file => file.indexOf('.') !== 0 && file !== 'basename' && file.slice(-3) === '.js').forEach(file => { const model = sequelize['import'](path.join(models, file)); db[model.name] = model; }); Object.keys(db).forEach(modelName => { if (db[modelName].associate) { db[modelName].associate(db); } }); db.Sequelize = Sequelize; db.sequelize = sequelize; module.exports = db;
// some_module.js const db = require('../database'); const users = await db.user.findAll({ where: { [db.Sequelize.Op.or]: [{ first_name: 'Smith' }, { last_name: 'Smith' }] } });
En suivant ces étapes, vous pouvez vous assurer que tous les modèles sont correctement enregistrés et que leurs associations sont correctement établies, permettant à Sequelize de créer les colonnes nécessaires pour les clés étrangères.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!