Maison > interface Web > js tutoriel > Pourquoi Sequelize ne crée-t-il pas toujours des colonnes de clé étrangère et comment puis-je résoudre ce problème ?

Pourquoi Sequelize ne crée-t-il pas toujours des colonnes de clé étrangère et comment puis-je résoudre ce problème ?

Mary-Kate Olsen
Libérer: 2024-12-09 08:48:07
original
506 Les gens l'ont consulté

Why Doesn't Sequelize Always Create Foreign Key Columns, and How Can I Fix This?

Pourquoi Sequelize ne crée-t-il pas une colonne de clé étrangère pour certains modèles ?

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.

Comprendre le problème

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.

Solution : enregistrement centralisé des modèles

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.

Mise en œuvre

  1. Créez un fichier unique, database.js, pour gérer l'enregistrement du modèle.
  2. Tout importer fichiers de modèle dans le répertoire models.
  3. Appelez la fonction Associate() pour chaque modèle pour définir les relations entre eux.
// 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;
Copier après la connexion
  1. Dans d'autres modules, importez l'objet db et accédez aux modèles et associations via celui-ci.
// some_module.js
const db = require('../database');

const users = await db.user.findAll({
  where: {
    [db.Sequelize.Op.or]: [{
      first_name: 'Smith'
    }, {
      last_name: 'Smith'
    }]
   }
});
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal