本文介绍了Sequelize ORM中连接表的条件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想用 sequelize ORM 得到这样的查询:
I want to get query like this with sequelize ORM:
SELECT "A".*,
FROM "A"
LEFT OUTER JOIN "B" ON "A"."bId" = "B"."id"
LEFT OUTER JOIN "C" ON "A"."cId" = "C"."id"
WHERE ("B"."userId" = '100'
OR "C"."userId" = '100')
问题是续集不允许我在 where 子句中引用B"或C"表.以下代码
The problem is that sequelise not letting me to reference "B" or "C" table in where clause. Following code
A.findAll({
include: [{
model: B,
where: {
userId: 100
},
required: false
}, {
model: C,
where: {
userId: 100
},
required: false
}]
]
给我
SELECT "A".*,
FROM "A"
LEFT OUTER JOIN "B" ON "A"."bId" = "B"."id" AND "B"."userId" = 100
LEFT OUTER JOIN "C" ON "A"."cId" = "C"."id" AND "C"."userId" = 100
这是完全不同的查询,结果是
which is completely different query, and result of
A.findAll({
where: {
$or: [
{'"B"."userId"' : 100},
{'"C"."userId"' : 100}
]
},
include: [{
model: B,
required: false
}, {
model: C,
required: false
}]
]
甚至不是一个有效的查询:
is no even a valid query:
SELECT "A".*,
FROM "A"
LEFT OUTER JOIN "B" ON "A"."bId" = "B"."id"
LEFT OUTER JOIN "C" ON "A"."cId" = "C"."id"
WHERE ("A"."B.userId" = '100'
OR "A"."C.userId" = '100')
sequelize 是否可以进行第一次查询,或者我应该坚持原始查询?
Is first query even possible with sequelize, or I should just stick to raw queries?
推荐答案
将引用连接表的列包装在 $$
Wrap the columns which reference joined tables in $$
A.findAll({
where: {
$or: [
{'$B.userId$' : 100},
{'$C.userId$' : 100}
]
},
include: [{
model: B,
required: false
}, {
model: C,
required: false
}]
});
这篇关于Sequelize ORM中连接表的条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!