Sequelize Model Association ne crée pas de colonne de clé étrangère
Dans Sequelize, une association définit la relation entre deux ou plusieurs modèles. Il fournit un moyen pratique d’accéder aux données associées et d’effectuer des requêtes complexes. Cependant, certains utilisateurs rencontrent un problème où Sequelize ne crée pas de colonne de clé étrangère pour un modèle particulier. Ce problème survient malgré des définitions d'association identiques pour d'autres modèles.
Comprendre la création de clé étrangère
Sequelize créera automatiquement des colonnes de clé étrangère lorsqu'une association est établie entre deux modèles. Cela se produit lorsque la propriété ForeignKey est spécifiée dans les options d'association. Par exemple, dans le modèle User fourni, l’association AppartientTo est définie avec une clé étrangère de role_id. Normalement, cela entraînerait la création d'une colonne role_id dans la table User.
Résoudre le problème
La solution à ce problème consiste à s'assurer que tous les modèles sont enregistrés et associés dans un emplacement central. En centralisant l'enregistrement et l'association des modèles, Sequelize peut gérer correctement les dépendances et créer les colonnes de clé étrangère nécessaires.
Mise en œuvre de l'enregistrement et de l'association centralisés des modèles
Le code suivant montre comment enregistrer et associer des modèles dans un seul fichier :
// database.js // Register all models in one place const fs = require('fs'); const path = require('path'); const Sequelize = require('sequelize'); const db = {}; const models = path.join(__dirname, 'models'); // Create a Sequelize instance const sequelize = new Sequelize(/* your connection settings here */); // Register models and add them to the db object fs. readdirSync(models). filter(function (file) { return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'); }). forEach(function (file) { // Sequelize version <= 5.x var model = sequelize['import'](path.join(models, file)); // Sequelize version >= 6.x // var model = require(path.join(models, file))( // sequelize, // Sequelize.DataTypes // ); db[model.name] = model; }); // Associate models within the db object Object.keys(db).forEach(function (modelName) { if (db[modelName].associate) { db[modelName].associate(db); } }); db.Sequelize = Sequelize; // for accessing static props and functions like Op.or db.sequelize = sequelize; // for accessing connection props and functions like 'query' or 'transaction' module.exports = db;
Utilisation Exemple
Dans d'autres modules de votre base de code, vous pouvez accéder à la connexion à la base de données centralisée et utiliser les modèles enregistrés comme ceci :
const db = require('../database'); const { Op } = require('sequelize'); // Use models defined in database.js const users = await db.user.findAll({ where: { [Op.or]: [ { first_name: 'Smith' }, { last_name: 'Smith' } ] } });
En suivant ces directives, vous pouvez vous assurer que tous vos modèles Sequelize sont correctement associés et que les colonnes de clés étrangères appropriées sont créées.
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!