我正在使用sequelize作为我的ORM,我想在函数中使用include,但返回的模型未与另一个模型关联。
我已经在两个模型上都添加了外键,但是似乎不能解决问题
这是我的功能
const MutasiModel = __model.mysql("mutasi")
const ActionCodesModel = __model.mysql("action-code")
const CodeError = __lib("code_error")
const ActionAttributes = ["id", "value"]
const getList = module.exports.getList = function(pages) {
let {page, rows, keyword} = pages
if(page !== undefined) {
page = parseInt(page)
if(rows === undefined) {
rows = 100
}
else {
rows = parseInt(page)
}
}
return MutasiModel.findAndCountAll({
include: [
{model: ActionCodesModel, attributes: ActionAttributes}
]})
}
这是我的mutasi mysql模型
const moment = require("moment")
module.exports = function($, DataTypes) {
const Mutasi = $.define('mutasi', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
id_lender: {
type: DataTypes.INTEGER
},
email: {
type: DataTypes.STRING(30),
},
action_date: {
type: DataTypes.STRING(30),
},
action_code: {
type: DataTypes.STRING(2),
defaultvalue: 0,
references: {
model: "action_codes",
key: "id"
}
},
amount: {
type: DataTypes.INTEGER
},
updated_at: {
type: DataTypes.INTEGER,
defaultvalue: 0
},
created_at: {
type: DataTypes.INTEGER,
defaultvalue: 0
}
},{
timestamps: false,
underscored: true,
tableName: "mutasi",
hooks: {
beforeCreate(mutasi, options) {
mutasi .created_at = mutasi .updated_at = moment().unix()
},
beforeUpdate(mutasi, options) {
mutasi .updated_at = moment().unix()
}
}
})
return Mutasi
}
这是我的action_code的mysql模型
module.exports = function($, DataTypes) {
const ActionCodes = $.define('actionCodes', {
id: {
type: DataTypes.STRING(2),
primaryKey: true
},
value: {
type: DataTypes.STRING(30),
notNull: false
}
}, {
timestamps: false,
underscored: true,
tableName: "action_codes"
})
return ActionCodes
}
我的mysql文件夹中有一个混合所有mysql文件的索引
const Sequelize = require("sequelize")
const $mysql = new Sequelize(process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
host: process.env.DB_HOST || "localhost",
port: (process.env.DB_PORT && parseInt(process.env.DB_PORT)) || 3000,
dialect: 'mysql',
pool: {
max: (process.env.DB_PORT && parseInt(process.env.DB_CON_MAX)) || 30,
min: (process.env.DB_PORT && parseInt(process.env.DB_CON_MIN)) || 0,
acquire: (process.env.DB_PORT && parseInt(process.env.DB_CON_TIMEOUT)) || 30000,
idle: (process.env.DB_PORT && parseInt(process.env.DB_CON_ALIVE)) || 10000
}
})
require(`${__dirname}/mysql/association`)($mysql)
const _Mysql_Model_Cache_ = {}
const loadMysqlModel = function(name) {
if(name === undefined) {
return $mysql
}
if(_Mysql_Model_Cache_[name]) {
return _Mysql_Model_Cache_[name]
}
_Mysql_Model_Cache_[name] = $mysql.import(`${__dirname}/mysql/${name}`)
_Mysql_Model_Cache_[name].sync()
return _Mysql_Model_Cache_[name]
}
const $redis = require("redis").createClient({
host: process.env.REDIS_HOST || "127.0.0.1",
port: process.env.REDIS_PORT || 6379,
no_ready_check: true,
password: process.env.REDIS_PASS || undefined
})
const loadRedisModel = function(name) {
return require(`${__dirname}/redis/${name}`)($redis)
}
module.exports = {
mysql: loadMysqlModel,
redis: loadRedisModel
}
这也是我的mysql关联文件
module.exports = function($) {
const AutoBidSetting = $.import(`${__dirname}/autobid-setting`)
const Balance = $.import(`${__dirname}/balance`)
const BidTransaction = $.import(`${__dirname}/bid-transaction`)
const Mutasi = $.import(`${__dirname}/mutasi`)
const ActionCodes = $.import(`${__dirname}/action-code`)
Mutasi.belongsTo(ActionCodes, {foreignKey: "action_code", sourceKey: "id"})
ActionCodes.hasMany(Mutasi, {foreignKey: "action_code", targetKey: "id"})
}
我希望在获得可变列表时包括action_codes表中动作代码的值,但它总是返回两个模型之间不相关的
预先感谢您的帮助。