Heim > Web-Frontend > js-Tutorial > Warum erstellt Sequelize nicht immer Fremdschlüsselspalten und wie kann ich das beheben?

Warum erstellt Sequelize nicht immer Fremdschlüsselspalten und wie kann ich das beheben?

Mary-Kate Olsen
Freigeben: 2024-12-09 08:48:07
Original
506 Leute haben es durchsucht

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

Warum erstellt Sequelize für bestimmte Modelle keine Fremdschlüsselspalte?

Sequelize erstellt normalerweise eine neue Spalte für Fremdschlüssel, wenn die Zugehörigkeit zu() verwendet wird. In einigen Szenarien ist dies jedoch möglicherweise nicht der Fall.

Verstehen des Problems

Ein solches Szenario ist im bereitgestellten Benutzermodell dargestellt, bei dem Sequelize die Spalte „role_id“ nicht erstellen kann. Dies führt zu Bedenken und Verwirrung, insbesondere wenn andere Modelle im selben Projekt das erwartete Verhalten zeigen.

Lösung: Zentralisierte Modellregistrierung

Die Lösung liegt in der Zentralisierung der Registrierung aller Modelle und ihrer Zuordnungen in ein Ort. Dadurch wird sichergestellt, dass Sequelize die richtigen Beziehungen zwischen Modellen herstellen kann.

Implementierung

  1. Erstellen Sie eine einzelne Datei, „database.js“, um die Modellregistrierung zu verwalten.
  2. Alle importieren Modelldateien im Modellverzeichnis.
  3. Rufen Sie die Funktion „associate()“ für jedes Modell auf, um Beziehungen zwischen ihnen zu definieren
// 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;
Nach dem Login kopieren
  1. Importieren Sie in anderen Modulen das Datenbankobjekt und greifen Sie darüber auf Modelle und Assoziationen zu.
// some_module.js
const db = require('../database');

const users = await db.user.findAll({
  where: {
    [db.Sequelize.Op.or]: [{
      first_name: 'Smith'
    }, {
      last_name: 'Smith'
    }]
   }
});
Nach dem Login kopieren

Indem Sie diese Schritte befolgen, Sie können sicherstellen, dass alle Modelle korrekt registriert und ihre Zuordnungen ordnungsgemäß eingerichtet sind, sodass Sequelize die erforderlichen Spalten für Fremdschlüssel erstellen kann.

Das obige ist der detaillierte Inhalt vonWarum erstellt Sequelize nicht immer Fremdschlüsselspalten und wie kann ich das beheben?. 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