首頁 > web前端 > js教程 > 為什麼 Sequelize 有時無法建立關聯的模型列,如何修復?

為什麼 Sequelize 有時無法建立關聯的模型列,如何修復?

Patricia Arquette
發布: 2024-12-02 21:13:16
原創
470 人瀏覽過

Why Does Sequelize Sometimes Fail to Create Associated Model Columns, and How Can I Fix It?

Sequelize 模型關聯列建立差異

在 Sequelize 中,模型關聯建立不同模型之間的關係。然而,使用者報告了一些不一致的情況:Sequelize 無法為某些模型建立預期的外鍵列,但為其他模型建立成功。本文深入探討了可能的原因,並提供了解決此問題的解決方案。

最初的問題源自於一個模型,其中 Sequelize 沒有為 User 模型與 Role 模型的關聯建立 role_id 欄位。儘管嘗試了各種故障排除方法,問題仍然存在。

解決方案在於確保所有模型及其關聯都在一個中心位置註冊。透過這樣做,您可以確保 Sequelize 完全了解所有模型關係,並可以在與資料庫同步期間建立必要的欄位。

集中模型註冊

推薦的方法是建立database.js 檔案並在其中註冊所有模型。以下是 database.js 檔案的範例:

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const db = {};

const models = path.join(__dirname, 'models');

const sequelize = new Sequelize(/* your connection settings here */);

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

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;
登入後複製

在此檔案中:

  • models 是模型檔案所在的目錄。
  • sequelize使用所需的連接設定進行初始化。
  • 匯入模型並將其各自的名稱註冊為資料庫的屬性物件。
  • 為每個具有關聯的模型呼叫關聯函數來建立關係。

存取模型

一旦你有集中您的模型註冊,您可以使用從database.js匯出的db物件在其他模組中存取它們。以下是使用使用者模型的範例:

const db = require('../database');
...
const users = await db.user
   .findAll({
     where: {
      [db.Sequelize.Op.or]: [{
        first_name: 'Smith'
      }, {
        last_name: 'Smith'
      }]
     }
})
登入後複製

透過集中模型註冊並確保正確定義關聯,您可以解決列建立不一致的問題並維護乾淨且有凝聚力的模型基礎架構。

以上是為什麼 Sequelize 有時無法建立關聯的模型列,如何修復?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板