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