假设我有两个模型
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子句?
一些例子将非常有用
由于
答案 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') }
}]
})
这对我来说很好。希望这对你有用