Sekuel Persatuan Model Tidak Mencipta Lajur Kunci Asing
Dalam Sekuel, persatuan mentakrifkan hubungan antara dua atau lebih model. Ia menyediakan cara yang mudah untuk mengakses data berkaitan dan melakukan pertanyaan yang kompleks. Walau bagaimanapun, sesetengah pengguna menghadapi isu di mana Sequelize tidak membuat lajur kunci asing untuk model tertentu. Masalah ini timbul walaupun definisi perkaitan yang sama untuk model lain.
Memahami Penciptaan Kunci Asing
Sequelize akan mencipta lajur kunci asing secara automatik apabila perkaitan diwujudkan antara dua model. Ini berlaku apabila sifat foreignKey ditentukan dalam pilihan perkaitan. Contohnya, dalam model Pengguna yang disediakan, perkaitan belongsTo ditakrifkan dengan foreignKey role_id. Biasanya, ini akan menghasilkan penciptaan lajur role_id dalam jadual Pengguna.
Menyelesaikan Isu
Penyelesaian kepada isu ini terletak pada memastikan semua model adalah berdaftar dan dikaitkan di satu lokasi pusat. Dengan memusatkan pendaftaran dan perkaitan model, Sequelize boleh mengendalikan kebergantungan dengan betul dan mencipta lajur kunci asing yang diperlukan.
Melaksanakan Pendaftaran dan Persatuan Model Berpusat
Kod berikut menunjukkan cara untuk daftar dan kaitkan model dalam satu fail:
// 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;
Penggunaan Contoh
Dalam modul lain pangkalan kod anda, anda boleh mengakses sambungan pangkalan data terpusat dan menggunakan model berdaftar seperti:
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' } ] } });
Dengan mengikuti garis panduan ini, anda boleh memastikan bahawa semua model Sequelize anda dikaitkan dengan betul dan lajur kunci asing yang sesuai dibuat.
Atas ialah kandungan terperinci Mengapa Sequelize Tidak Mencipta Lajur Utama Asing Saya dalam Persatuan Model?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!