nodejs sequelize连接查询

时间:2015-07-22 14:35:48

标签: node.js join orm sequelize.js

假设我有两个模型

var A = db.seq.define('A',{
    id1: { type: db.Sequelize.INTEGER},
    id2: { type: db.Sequelize.INTEGER},
    count: { type: db.Sequelize.INTEGER},
});

var b = db.seq.define("b",{
    id1: { type: db.Sequelize.INTEGER },
    id2: { type: db.Sequelize.INTEGER },
    name: { type: db.Sequelize.STRING},
});

A.hasMany(B, {foreignKey: 'id1'})
B.belongsTo(A, {foreignKey: 'id1'})

A.findAll({
    include: [{
        model: B,
        where: { B.id2: { $eq:A.id2 } }
    }]
})

可以进行那种查询吗?

如何更新我的模型以指定连接句子上的其他条件,或者我应该将检查移动到查询where子句?

一些例子将非常有用

由于

2 个答案:

答案 0 :(得分:0)

尝试

A.findAll({
    include: [{
        model: B,
        where: { id2: sequelize.col('A.id2') }
    }]
})

id2将自动引用B.

答案 1 :(得分:0)

目前Jan Aagaard Meier的答案并未完全奏效 我发现在实际查询中无法识别id2。 例如查询

A.findAll({
    include: [{
        model: B,
        where: { id2: sequelize.col('A.id2') }
    }]
})

应该识别为' A'。' PrimaryKey' =' B'。' ForeignKey'和id2 =' A'。' id2' 但不知何故,sequelize并没有加左侧,所以它忽略了 ' A''的PrimaryKey' =' B'。' ForeignKey'和' A'。' id2'

所以查询无效 我已经完成了执行续集时打印的原始查询,并发现了什么错误。 有没有人有想法解决这个问题?

找到了答案

A.findAll({
    include: [{
        model: B,
        where: { sequelize.col('A.id2), "=", sequelize.col('B.id2') }
    }]
})

这对我来说很好。希望这对你有用