Maison >interface Web >js tutoriel >Pourquoi Sequelize ne parvient-il parfois pas à créer des colonnes de modèle associées et comment puis-je y remédier ?
Différences de création de colonnes d'association de modèles Sequelize
Dans Sequelize, les associations de modèles établissent des relations entre différents modèles. Cependant, les utilisateurs ont signalé des incohérences dans lesquelles Sequelize ne parvient pas à créer la colonne de clé étrangère attendue pour certains modèles mais réussit pour d'autres. Cet article examine les raisons possibles et propose une solution pour résoudre ce problème.
La question initiale découle d'un modèle dans lequel Sequelize n'a pas créé la colonne role_id pour l'association du modèle utilisateur avec le modèle de rôle. Malgré les tentatives de diverses méthodes de dépannage, le problème persiste.
La solution consiste à garantir que tous les modèles et leurs associations sont enregistrés dans un emplacement central. Ce faisant, vous pouvez vous assurer que Sequelize a une connaissance complète de toutes les relations des modèles et peut créer les colonnes nécessaires lors de la synchronisation avec la base de données.
Enregistrement centralisé des modèles
Le L'approche recommandée consiste à créer un fichier database.js et à y enregistrer tous les modèles. Voici un exemple de fichier database.js :
const fs = require('fs'); const path = require('path'); const Sequelize = require('sequelize'); const db = {}; const models = path.join(__dirname, 'models'); const sequelize = new Sequelize(/* your connection settings here */); 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; }); 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;
Dans ce fichier :
Accès aux modèles
Une fois que vous avez centralisé l'enregistrement de votre modèle, vous pouvez y accéder dans d'autres modules en utilisant l'objet db exporté depuis database.js. Voici un exemple d'utilisation du modèle utilisateur :
const db = require('../database'); ... const users = await db.user .findAll({ where: { [db.Sequelize.Op.or]: [{ first_name: 'Smith' }, { last_name: 'Smith' }] } })
En centralisant l'enregistrement du modèle et en vous assurant que les associations sont correctement définies, vous pouvez résoudre le problème de création de colonnes incohérentes et maintenir une infrastructure de modèle propre et cohérente.
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!