【问题标题】:Model association in sequelize [erro]{ this.name}.hasMany called with something that's not a subclass of Sequelize.Modelsequelize [erro]{ this.name}.hasMany 中的模型关联使用不是 Sequelize.Model 子类的东西调用
【发布时间】:2020-03-07 12:04:21
【问题描述】:

我正在尝试创建一个项目并使用node.js + sequelize,该项目有两个模型Fator和Sub_fator。它们有一个关联 1:N,但是在创建 fator 时,返回了一个错误:

错误:Fator.hasMany 调用的东西不是 Sequelize.Model 的子类

有解决错误的建议吗?

模型因子

'use strict';
const Sub_Fator = require('./sub_fator');

module.exports = (sequelize, DataTypes) => {
  const Fator = sequelize.define('Fator', {
    descricao: DataTypes.STRING
  }, {});
  Fator.associate = function(models) {
      Fator.hasMany(Sub_Fator, {
      foreignKey: 'fatorId',
      as: 'fatores'
    });
  };
  return Fator;
};

模型Sub_fator

'use strict';
const Fator = require('./fator');

module.exports = (sequelize, DataTypes) => {
  const Sub_Fator = sequelize.define('Sub_Fator', {
    fatorId: DataTypes.INTEGER,
    descricao: DataTypes.STRING
  }, {});
  Sub_Fator.associate = function(models) {
    Sub_Fator.belongsTo(Fator, {
      foreignKey: 'fatorId',
      as: 'fatores'
    });
  };
  return Sub_Fator;
};

【问题讨论】:

    标签: node.js postgresql orm sequelize.js


    【解决方案1】:
    //Removed this import because is not an object of Model it's a definition
    module.exports = (sequelize, DataTypes) => {
      const Fator = sequelize.define('Fator', {
        descricao: DataTypes.STRING
      }, {});
      Fator.associate = function(models) {
          Fator.hasMany(models.Sub_Fator, {//Change to this instead of Sub_Fator
            foreignKey: 'fatorId',
            as: 'fatores'
        });
      };
      return Fator;
    };
    

    原因是因为你在这里定义了模型,但是在你的 models/index.js 或类似的东西中你必须导入它来生成一个对象模型,这只是一个模型定义,它不是 Sequelize 的子类.模型。

    PS:如果您在项目中生成了 sequelize,您的索引应该是这样的:

    'use strict';
    
    var fs        = require('fs');
    var path      = require('path');
    var Sequelize = require('sequelize');
    var basename  = path.basename(module.filename);
    var env       = process.env.NODE_ENV || 'development';
    var config    = require(__dirname + '/../config/server-config.json')[env];
    var db        = {};
    
    if (config.use_env_variable) {
      var sequelize = new Sequelize(process.env[config.use_env_variable]);
    } else {
      var sequelize = new Sequelize(config.database, config.username, config.password, config);
    }
    
    fs
      .readdirSync(__dirname)
      .filter(function(file) {
        return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
      })
      .forEach(function(file) {
        var model = sequelize['import'](path.join(__dirname, file));
        db[model.name] = model;
      });
    
    Object.keys(db).forEach(function(modelName) {
      if (db[modelName].associate) {
        db[modelName].associate(db);
      }
    });
    
    db.sequelize = sequelize;
    db.Sequelize = Sequelize;
    
    module.exports = db;
    

    【讨论】:

      猜你喜欢
      • 2019-05-21
      • 1970-01-01
      • 2018-04-20
      • 1970-01-01
      • 2017-10-19
      • 2022-01-04
      • 2020-09-21
      • 1970-01-01
      • 2020-12-20
      相关资源
      最近更新 更多