首頁 >web前端 >js教程 >為什麼 Sequelize 不在模型關聯中建立我的外鍵列?

為什麼 Sequelize 不在模型關聯中建立我的外鍵列?

Susan Sarandon
Susan Sarandon原創
2024-12-06 15:16:11627瀏覽

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

Sequelize 模型關聯未建立外鍵列

在 Sequelize 中,關聯定義兩個或多個模型之間的關係。它提供了一種存取相關資料和執行複雜查詢的便捷方法。但是,某些使用者遇到 Sequelize 不會為特定模型建立外鍵列的問題。儘管其他模型具有相同的關聯定義,但還是會出現此問題。

了解外鍵建立

當兩個模型之間建立關聯時,Sequelize 會自動建立外鍵列。當在關聯選項中指定foreignKey 屬性時,會發生這種情況。例如,在提供的 User 模型中,belongsTo 關聯是使用 role_id 的foreignKey 定義的。通常,這會導致在 User 表中建立 role_id 列。

解決問題

此問題的解決方案在於確保所有模型都在一個中心位置進行註冊和關聯。透過集中模型註冊和關聯,Sequelize 可以正確處理依賴關係並建立必要的外部鍵列。

實現集中模型註冊和關聯

以下程式碼示範如何在單一檔案中註冊和關聯模型:

// 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;

用法範例

在程式碼庫的其他模組中,您可以存取集中式資料庫連線並使用已註冊的模型,如下所示:

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'
      }
    ]
  }
});

透過遵循這些準則,您可以確保您的所有Sequelize 模型都正確關聯,並且建立了適當的外鍵列。

以上是為什麼 Sequelize 不在模型關聯中建立我的外鍵列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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