Heim > Web-Frontend > js-Tutorial > Warum erstellt Sequelize nicht meine Fremdschlüsselspalte in Modellzuordnungen?

Warum erstellt Sequelize nicht meine Fremdschlüsselspalte in Modellzuordnungen?

Susan Sarandon
Freigeben: 2024-12-06 15:16:11
Original
630 Leute haben es durchsucht

Why Doesn't Sequelize Create My Foreign Key Column in Model Associations?

Sequelize-Modellzuordnung erstellt keine Fremdschlüsselspalte

In Sequelize definiert eine Zuordnung die Beziehung zwischen zwei oder mehr Modellen. Es bietet eine bequeme Möglichkeit, auf verwandte Daten zuzugreifen und komplexe Abfragen durchzuführen. Bei einigen Benutzern tritt jedoch ein Problem auf, bei dem Sequelize keine Fremdschlüsselspalte für ein bestimmtes Modell erstellt. Dieses Problem tritt trotz identischer Assoziationsdefinitionen für andere Modelle auf.

Grundlegendes zur Erstellung von Fremdschlüsseln

Sequelize erstellt automatisch Fremdschlüsselspalten, wenn eine Assoziation zwischen zwei Modellen hergestellt wird. Dies geschieht, wenn die Eigenschaft „foreignKey“ in den Zuordnungsoptionen angegeben wird. Beispielsweise wird im bereitgestellten Benutzermodell die Zugehörigkeit zu Zuordnung mit dem ForeignKey „role_id“ definiert. Normalerweise würde dies zur Erstellung einer „role_id“-Spalte in der Benutzertabelle führen.

Lösung des Problems

Die Lösung dieses Problems besteht darin, sicherzustellen, dass alle Modelle vorhanden sind an einem zentralen Ort registriert und verknüpft werden. Durch die Zentralisierung der Modellregistrierung und -zuordnung kann Sequelize Abhängigkeiten korrekt verarbeiten und die erforderlichen Fremdschlüsselspalten erstellen.

Implementierung der zentralisierten Modellregistrierung und -zuordnung

Der folgende Code zeigt, wie das geht Registrieren und verknüpfen Sie Modelle in einer einzigen Datei:

// 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;
Nach dem Login kopieren

Verwendung Beispiel

In anderen Modulen Ihrer Codebasis können Sie auf die zentrale Datenbankverbindung zugreifen und die registrierten Modelle wie folgt verwenden:

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'
      }
    ]
  }
});
Nach dem Login kopieren

Durch Befolgen dieser Richtlinien können Sie dies sicherstellen alle Ihre Sequelize-Modelle korrekt verknüpft sind und die entsprechenden Fremdschlüsselspalten erstellt wurden.

Das obige ist der detaillierte Inhalt vonWarum erstellt Sequelize nicht meine Fremdschlüsselspalte in Modellzuordnungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage