首页 > web前端 > js教程 > 为什么 Sequelize 有时无法创建关联的模型列,如何修复?

为什么 Sequelize 有时无法创建关联的模型列,如何修复?

Patricia Arquette
发布: 2024-12-02 21:13:16
原创
465 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板