Sequelize biasanya mencipta lajur baharu untuk kunci asing apabila menggunakan persatuan belongsTo(). Walau bagaimanapun, dalam sesetengah senario, ia mungkin tidak berbuat demikian.
Satu senario sedemikian digambarkan dalam model Pengguna yang disediakan, di mana Sequelize gagal mencipta lajur role_id. Ini menimbulkan kebimbangan dan kekeliruan, terutamanya apabila model lain dalam projek yang sama mempamerkan gelagat yang diharapkan.
Penyelesaian terletak pada memusatkan pendaftaran semua model dan persatuan mereka dalam satu tempat. Ini memastikan bahawa Sequelize boleh mewujudkan perhubungan yang betul antara model.
// 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;
// some_module.js const db = require('../database'); const users = await db.user.findAll({ where: { [db.Sequelize.Op.or]: [{ first_name: 'Smith' }, { last_name: 'Smith' }] } });
Dengan mengikuti ini langkah, anda boleh memastikan bahawa semua model didaftarkan dengan betul dan perkaitannya diwujudkan dengan betul, membolehkan Sequelize mencipta lajur yang diperlukan untuk bahasa asing. kunci.
Atas ialah kandungan terperinci Mengapa Tidak Sekuel Sentiasa Mencipta Lajur Utama Asing, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!