首頁 >web前端 >js教程 >為什麼 Sequelize 不總是建立外鍵列,如何解決此問題?

為什麼 Sequelize 不總是建立外鍵列,如何解決此問題?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-09 08:48:07507瀏覽

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

為什麼 Sequelize 不為某些模型建立外鍵列?

Sequelize 通常在使用 ownTo() 關聯時為外鍵建立一個新欄位。但是,在某些情況下,它可能不會這樣做。

理解問題

提供的 User 模型中描述了一個這樣的場景,其中 Sequelize 無法建立 role_id 欄位。這會引起擔憂和困惑,特別是當同一項目中的其他模型表現出預期行為時。

解決方案:集中模型註冊

解決方案在於集中註冊所有模型及其關聯一個地方。這確保 Sequelize 可以在模型之間建立正確的關係。

實作

  1. 建立單一檔案 database.js 來處理模型註冊。
  2. 匯入所有models 目錄中的模型檔案。
  3. 為每個模型呼叫Associate() 函數來定義模型之間的關係
// 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. 在其他模組中,導入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'
    }]
   }
});

按照以下步驟,您可以確保所有模型都正確註冊,並且正確建立它們的關聯,從而允許 Sequelize 為外鍵建立必要的列。

以上是為什麼 Sequelize 不總是建立外鍵列,如何解決此問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn