Rumah >hujung hadapan web >tutorial js >Mengapa Sequelize Kadangkala Gagal Mencipta Lajur Model Berkaitan, dan Bagaimana Saya Boleh Membetulkannya?
Percanggahan Penciptaan Lajur Persatuan Model
Dalam Sequelize, persatuan model mewujudkan hubungan antara model yang berbeza. Walau bagaimanapun, pengguna telah melaporkan ketidakkonsistenan apabila Sequelize gagal mencipta lajur kunci asing yang dijangkakan untuk model tertentu tetapi berjaya untuk model lain. Artikel ini menyelidiki kemungkinan sebab dan menyediakan penyelesaian untuk menyelesaikan isu ini.
Persoalan asal timbul daripada model di mana Sequelize tidak mencipta lajur role_id untuk perkaitan model Pengguna dengan Role model. Walaupun mencuba pelbagai kaedah penyelesaian masalah, isu itu berterusan.
Penyelesaian terletak pada memastikan semua model dan persatuannya didaftarkan di satu lokasi pusat. Dengan berbuat demikian, anda boleh memastikan bahawa Sequelize mempunyai pengetahuan lengkap tentang semua perhubungan model dan boleh mencipta lajur yang diperlukan semasa penyegerakan dengan pangkalan data.
Pendaftaran Model Berpusat
The pendekatan yang disyorkan ialah mencipta fail database.js dan mendaftarkan semua model di dalamnya. Berikut ialah contoh fail database.js:
const fs = require('fs'); const path = require('path'); const Sequelize = require('sequelize'); const db = {}; const models = path.join(__dirname, 'models'); const sequelize = new Sequelize(/* your connection settings here */); 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; }); 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;
Dalam fail ini:
Mengakses Model
Sebaik sahaja anda mempunyai memusatkan pendaftaran model anda, anda boleh mengaksesnya dalam modul lain menggunakan objek db yang dieksport daripada database.js. Berikut ialah contoh penggunaan model pengguna:
const db = require('../database'); ... const users = await db.user .findAll({ where: { [db.Sequelize.Op.or]: [{ first_name: 'Smith' }, { last_name: 'Smith' }] } })
Dengan memusatkan pendaftaran model dan memastikan perkaitan ditakrifkan dengan betul, anda boleh menyelesaikan isu penciptaan lajur yang tidak konsisten dan mengekalkan infrastruktur model yang bersih dan padu.
Atas ialah kandungan terperinci Mengapa Sequelize Kadangkala Gagal Mencipta Lajur Model Berkaitan, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!