【问题标题】:belongsToMany called with something that's not a subclass of Sequelize.Model error使用不是 Sequelize.Model 错误子类的东西调用 belongsToMany
【发布时间】:2020-09-26 15:37:04
【问题描述】:

你好我的地址模型

const { DataTypes } = require('sequelize');  
const sequelize = require('../../../db/connection');  
var BorrowerInfo = require('../../models/borrowerInfo/BorrowerInfo')
const Address = sequelize.define('addresses', {
    id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true,
        allowNull: false,
    },
    street: {
        type: DataTypes.STRING,
        allowNull: false
    },
    unit: {
        type: DataTypes.STRING,
        allowNull: false
    },
    city: {
        type: DataTypes.STRING,
        allowNull: false
    },
    state: {
        type: DataTypes.STRING,
        allowNull: false
    },
    zip: {
        type: DataTypes.STRING,
        allowNull: false
    },
    country: {
        type: DataTypes.STRING,
        allowNull: false
    },
},
    {
        freezeTableName: true
    },
    {
    }
);
Address.associate = (models) => {
    Address.belongsToMany(BorrowerInfo, {
        through: 'BorrowerAddresses',
        as: 'address',
        foreignKey: 'addressId'
      });
  };
module.exports = Address;

我的借款人模式

 const { DataTypes } = require('sequelize');
const sequelize = require('../../../db/connection');

const Address = require('../../models/common/Address')


const BorrowerInfo = sequelize.define('borrower_info', {
    id : {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true ,
        allowNull: false,
    },
    loanAppNo : {
        type: DataTypes.STRING,
        allowNull: false
    },
    firstName: {
        type: DataTypes.STRING,
        allowNull: false
    },
    lastName: {
        type: DataTypes.STRING,
        allowNull: false
    },
    middleName:{
        type: DataTypes.STRING,
        allowNull: false
    },
    suffix: {
        type: DataTypes.STRING,
        allowNull: false
    },
    ssn: {
        type: DataTypes.STRING,
        allowNull: false
    },
    dob: {
        type: DataTypes.DATE,
        allowNull: false
    },
    citizenship: {
        type: DataTypes.STRING,
        allowNull: false
    },
    maritalStatus: {
        type: DataTypes.ENUM('1','2','3'),
    },
    noOfDependantChilds: {
        type: DataTypes.INTEGER,
        allowNull: false
    },
    agesDependantChilds: {
        type: DataTypes.STRING,
        allowNull: false
    },
    contactInfo: {
        type: DataTypes.JSON,
        allowNull: false
    }, 
    createdAt: {
        type: DataTypes.NOW,
    }
},
    { 
        timestamps: false,
        freezeTableName: true
    },
    {
    }
);

    BorrowerInfo.belongsToMany(Address, {
        through: 'borrower_addresses',
      });
module.exports = BorrowerInfo;  

我的借款人地址模型

const {
    DataTypes
} = require('sequelize');
var Addresses = require('../common/Address')
const sequelize = require('../../../db/connection');

const BorrowerAddresses = sequelize.define('borrower_addresses', {

id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true,
    allowNull: false,
},
borrowerInfoId: {
    type: DataTypes.INTEGER,
    allowNull: false
},
type: {
    type: DataTypes.ENUM('current', 'former', 'mailing'),
    allowNull: false
},
addressId: {
    type: DataTypes.INTEGER,
    allowNull: false
},
howLongAtCurrentAddress: {
    type: DataTypes.INTEGER,
    allowNull: false
},
housing: {
    type: DataTypes.ENUM('1', '2', '3'),
},
rentPerMonth: {
    type: DataTypes.FLOAT,
    allowNull: false
},
createdAt: {
    type: DataTypes.NOW,
}
}, {
    timestamps: false,
    freezeTableName: true
});

module.exports = BorrowerAddresses;  

错误:borrower_info.belongsToMany 调用的东西不是 Sequelize.Model 的子类

当我在借款人信息模型中安慰地址模型时,
BorrowerInfo: class extends Model {} 地址:{}

地址模型没有扩展模型类

但是当我在地址模型中安慰借款人信息模型时,它正在扩展模型类有什么问题请指导我如何摆脱这个错误

请标记可以提供帮助的人

【问题讨论】:

    标签: javascript node.js sequelize.js associations


    【解决方案1】:

    您的模型定义是实际的模型名称。因此,请使模型名称与下面的定义相同。

    module.exports = (sequelize, DataTypes) => {
      const BorrowerInfo = sequelize.define('BorrowerInfo', {
         id : {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true ,
        allowNull: false,
        },
        ....
       {
        tableName: 'borrower_info', // you can pass your tablename here
      });
      return BorrowerInfo;
    };
    

    如果您的模型名称是 Address,sequelize 会将此模型映射到名为 Addresses 的表中,您可以通过显式传递表名称来防止这种行为。

    【讨论】:

    • 但是我的借款人信息表正在使用我当前的语法,只有地址表的行为不正确
    【解决方案2】:

    如果有人卡在这里,我找到了解决方案

    实际上,我必须在单个文件中初始化所有模型,而不是从单个文件中导入它,例如。

    文件:index.js

    'use strict';
    const fs = require('fs');
    const path = require('path');
    const basename = path.basename(module.filename);
    const sequelize = require('../../db/connection');
    
    let db = {};
    // borrower info
    fs.readdirSync(`${__dirname}/borrowerInfo`)
        .filter(function (file) {
            return (file.indexOf('.') !== 0) && (file !== basename);
        })
        .forEach(function (file) {
            if (file.slice(-3) !== '.js') return;
            let model = sequelize['import'](path.join(`${__dirname}/borrowerInfo`, file));
            db[model.name] = model;
        });
    
    
    //loan team
    fs.readdirSync(`${__dirname}/loanTeam`)
        .filter(function (file) {
            return (file.indexOf('.') !== 0) && (file !== basename);
        })
        .forEach(function (file) {
            if (file.slice(-3) !== '.js') return;
            let model = sequelize['import'](path.join(`${__dirname}/loanTeam`, file));
            db[model.name] = model;
        });
    
    // common
    fs.readdirSync(`${__dirname}/common`)
        .filter(function (file) {
            return (file.indexOf('.') !== 0) && (file !== basename);
        })
        .forEach(function (file) {
            if (file.slice(-3) !== '.js') return;
            let model = sequelize['import'](path.join(`${__dirname}/common`, file));
            db[model.name] = model;
        });
    
    
    // role
    fs.readdirSync(`${__dirname}/role`)
        .filter(function (file) {
            return (file.indexOf('.') !== 0) && (file !== basename);
        })
        .forEach(function (file) {
            if (file.slice(-3) !== '.js') return;
            let model = sequelize['import'](path.join(`${__dirname}/role`, file));
            db[model.name] = model;
        });
    
    // user
    fs.readdirSync(`${__dirname}/user`)
        .filter(function (file) {
            return (file.indexOf('.') !== 0) && (file !== basename);
        })
        .forEach(function (file) {
            if (file.slice(-3) !== '.js') return;
            let model = sequelize['import'](path.join(`${__dirname}/user`, file));
            db[model.name] = model;
        });
    
    Object.keys(db).forEach(function (modelName) {
        if (db[modelName].associate) {
            db[modelName].associate(db);
        }
    });
    
    
    db.sequelize = sequelize;
    module.exports = db;   
    

    导入其他文件

    const models = require('../models/index')
    const exampleTable = models.tableName
    

    【讨论】:

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