续集一对多关联

时间:2017-08-14 09:11:23

标签: node.js sequelize.js

我试图通过参考sequelize文档来将sequelize一个映射到多个关联,但我无法找到一个完整的例子来使它工作。

我有一个 ClaimType 模型如下

const Sequelize = require('sequelize');

module.exports = function (sequelize) {
    const ClaimType = sequelize.define('claim_type', {
        id: {
            type: Sequelize.INTEGER,
            autoIncrement: true,
            primaryKey: true
        },
        name: {
            type: Sequelize.STRING
        }
    }, {
            timestamps: false,
            freezeTableName: true
        });

    return ClaimType;
};

MaxClaimAmount

const Sequelize = require('sequelize');

module.exports = function (sequelize) {
    const MaxClaimAmount = sequelize.define('max_claim_amount', {
        id: {
            type: Sequelize.INTEGER,
            autoIncrement: true,
            primaryKey: true
        },
        amount: {
            type: Sequelize.DECIMAL
        },
        year: {
            type: Sequelize.INTEGER
        }
    }, {
            timestamps: false,
            freezeTableName: true
        });

    return MaxClaimAmount;
};

最后在 index.js

const ClaimType = require('./model/claim_type.js')(sequelize);
const MaxClaimAmount = require('./model/max_claim_amount.js')(sequelize);
ClaimType.hasMany(MaxClaimAmount, { as: 'claimAmount' });

sequelize.sync({ force: false }).then(() => {
            return sequelize.transaction(function (t) {
                return ClaimType.create({
                    name: 'OPD'
                }, { transaction: t }).then(function (claimType) {            
                    // want to know how to associate MaxClaimAmount
                });
            }).then(function (result) {
                sequelize.close();
                console.log(result);
            }).catch(function (err) {
                sequelize.close();
                console.log(err);
            });
        });

ClaimType 对象是从事务的第一部分返回的,我想知道如何实现 ClaimType MaxClaimAmount 之间的关联?

1 个答案:

答案 0 :(得分:0)

您在模型中建立关联。

(关联:续集文档中的一对多)

const ClaimType = sequelize.define('claim_type', {/* ... */})

const MaxClaimAmount = sequelize.define('max_claim_type', {/* ... */})

ClaimType.hasMany(MaxClaimAmount, {as: 'MaxClaims'})

这会将属性claim_typeIdclaim_type_id添加到MaxClaimAmount(您会在列表中看到该列)。 ClaimType的实例将获取访问者getMaxClaimssetMaxClaims(因此您可以在表格上设置外部ID)

下一步是创建后端路由并使用访问器实例方法设置外键。访问器函数的调用方式如下:(instance1).setMaxClaims(instance2)

从查询中返回实例