使用sequelize.js创建与多个外键的关联

时间:2017-06-22 17:35:10

标签: javascript sequelize.js

我希望使用sequelize.js进行一次调用并ping两个表。

我希望我的结果能够在第二个表格中找到与两个外键相匹配的相应数据 - ' timeperiod'和' nodeid'

目前,无论别名是什么 - 我的查询结果只匹配我指定的最后一个外键。因此,在这种情况下的时间段。

associate: function (models) {
    models.belowOcfBudget.belongsTo(models.belowOcf, {
        foreignKey: 'nodeid',
        targetKey: 'nodeid',
        as: 'belowOcf_id'
    });
    models.belowOcfBudget.belongsTo(models.belowOcf, {
        foreignKey: 'timeperiod',
        targetKey: 'timeperiod',
        as: 'belowOcf_time'
    });
}

以下是我在路由器中包含此关联的位置。

    BelowOCFBudget.findAll({
    raw: true,
    include:[{
        model: models.belowOcf,
        as: 'belowOcf_id'
    }],
    include:[{
        model: models.belowOcf,
        as: 'belowOcf_time'
    }]

如何让我的查询执行并从两个具有匹配timeperiod和id的表中返回一个数据集?

1 个答案:

答案 0 :(得分:0)

您不应该两次包含相关模型。这导致同一个表上的LEFT JOIN,每个外键一个。 而是只包含一次,并将第二个外键的匹配作为附加的where子句添加到include。

Haven没有测试过,但看起来应该是这样的:

BelowOCFBudget.findAll({
    raw: true,
    include:[{
        model: models.belowOcf,
        where: {belowOcf.timeperiod: timeperiod}
    }],
})