Rumah >hujung hadapan web >tutorial js >Mengapa Sequelize Tidak Mencipta Lajur Utama Asing Saya dalam Persatuan Model?

Mengapa Sequelize Tidak Mencipta Lajur Utama Asing Saya dalam Persatuan Model?

Susan Sarandon
Susan Sarandonasal
2024-12-06 15:16:11628semak imbas

Why Doesn't Sequelize Create My Foreign Key Column in Model Associations?

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!

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