sequelize的关联归属于和hasMany错误sequelizeEagerLoading模型未与模型关联

时间:2019-09-23 09:44:13

标签: javascript mysql sequelize.js

我正在使用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表中动作代码的值,但它总是返回两个模型之间不相关的

预先感谢您的帮助。

0 个答案:

没有答案