Rumah >hujung hadapan web >tutorial js >Mengapa Tidak Sekuel Sentiasa Mencipta Lajur Utama Asing, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Tidak Sekuel Sentiasa Mencipta Lajur Utama Asing, dan Bagaimana Saya Boleh Membetulkannya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-09 08:48:07509semak imbas

Why Doesn't Sequelize Always Create Foreign Key Columns, and How Can I Fix This?

Mengapa Sequelize Tidak Mencipta Lajur Kunci Asing untuk Model Tertentu?

Sequelize biasanya mencipta lajur baharu untuk kunci asing apabila menggunakan persatuan belongsTo(). Walau bagaimanapun, dalam sesetengah senario, ia mungkin tidak berbuat demikian.

Memahami Isu

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: Pendaftaran Model Berpusat

Penyelesaian terletak pada memusatkan pendaftaran semua model dan persatuan mereka dalam satu tempat. Ini memastikan bahawa Sequelize boleh mewujudkan perhubungan yang betul antara model.

Pelaksanaan

  1. Buat satu fail, database.js, untuk mengendalikan pendaftaran model.
  2. Import semua fail model dalam direktori model.
  3. Panggil fungsi associate() untuk setiap model untuk menentukan hubungan antara mereka.
// 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;
  1. Dalam modul lain, import objek db dan akses model serta perkaitan melaluinya.
// 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn