你好我的地址模型
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;
错误:使用不是Sequelize.Model的子类的东西调用了rower_info.belongsToMany
当我在下面的借款人信息模型中安慰地址模型时
BorrowerInfo:类扩展了模型{}
地址:{}
地址模型没有扩展模型类
但是当我在地址模型中合并借款人信息模型时,它正在扩展模型类,这是什么问题,请指导我如何摆脱此错误
请标记一些可以提供帮助的人
答案 0 :(得分:0)
您的模型定义是实际的模型名称。因此,使模型名称与下面的定义相同。
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
的表,您可以通过显式传递表名来防止该行为。
答案 1 :(得分:0)
如果有人卡在这里,我找到了解决方法
实际上,我必须在单个文件中初始化所有模型,而不是例如从单个文件中导入它。
文件: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