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
Mary-Kate Olsenoriginal
2024-12-09 08:48:07560parcourir

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;
  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'
    }]
   }
});

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!

Déclaration:
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