Lajur Persatuan Model Sekuel Tidak Dicipta: Penyelesaian Masalah dan Penyelesaian
Apabila menggunakan Sequelize untuk mencipta perkaitan antara model, lajur baharu dijangka harus ditambah untuk mewakili kekangan kunci asing. Walau bagaimanapun, mungkin terdapat keadaan di mana lajur ini tidak dibuat untuk sesetengah model. Isu ini boleh berpunca daripada pelbagai punca, yang akan kami terokai dan sediakan penyelesaiannya.
Punca: Model Tidak Didaftarkan Bersama
Untuk mewujudkan persatuan dengan betul, semua model yang terlibat dalam perhubungan mesti didaftarkan bersama di satu lokasi pusat. Jika ini tidak berlaku, Sequelize mungkin tidak dapat mentakrifkan lajur kunci asing yang diperlukan dengan betul.
Penyelesaian:
Alihkan semua definisi model dan perkaitannya ke dalam fail khusus, seperti database.js. Pastikan semua model didaftarkan secara berurutan untuk memudahkan proses persatuan.
Punca: Konfigurasi Model Tidak Sah
Sequelize mengharapkan kaedah khusus digunakan untuk mentakrifkan persatuan. Salah konfigurasi atau penyelewengan daripada konvensyen yang ditetapkan boleh menghalang lajur kunci asing daripada dicipta.
Penyelesaian:
Sahkan bahawa fungsi bersekutu ditakrifkan dengan betul dan kunci asing ditentukan sebagai sifat foreignKey. Contohnya:
User.associate = (models) => { User.belongsTo(models.Role, { foreignKey: 'role_id' }); };
Punca: Konflik Nama Model
Sekuel mungkin menghadapi masalah jika model dengan nama yang sama telah ditakrifkan sebelum ini. Ini boleh berlaku apabila anda menyalin dan menampal definisi model atau menggunakan semula kod merentas projek yang berbeza.
Penyelesaian:
Pastikan setiap model mempunyai nama yang unik untuk mengelakkan kekeliruan. Namakan semula mana-mana model pendua atau alihkannya ke fail berasingan.
Contoh Kod:
Kod berikut menunjukkan pendekatan yang disatukan untuk pendaftaran model dan definisi persatuan:
// database.js const models = path.join(__dirname, 'models'); const registerModels = async (sequelize) => { const modelFiles = fs.readdirSync(models).filter((file) => file.endsWith('.js')); for (const file of modelFiles) { const model = await import(path.join(models, file)); await model.model(sequelize); } // Define model associations Object.keys(sequelize.models).forEach((modelName) => { if (sequelize.models[modelName].associate) { sequelize.models[modelName].associate(sequelize.models); } }); };
Pendekatan ini melibatkan pendaftaran semua model secara dinamik dan menentukan persatuan secara berpusat. Ia memastikan bahawa Sequelize boleh mencipta lajur kunci asing dengan betul dan mewujudkan perhubungan yang diperlukan.
Atas ialah kandungan terperinci Mengapa lajur perkaitan model Sequelize saya tidak dibuat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!