Где условие для объединенной таблицы в Sequelize ORM
Я хочу получить запрос, подобный этому, с продолжением 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')
Проблема заключается в том, что я не буду ссылаться на таблицу "B" или "C" в разделе where. Следующий код
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
который представляет собой совершенно другой запрос и результат
A.findAll({
where: {
$or: [
{'"B"."userId"' : 100},
{'"C"."userId"' : 100}
]
},
include: [{
model: B,
required: false
}, {
model: C,
required: false
}]
]
даже не является допустимым запросом:
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, или я должен просто придерживаться необработанных запросов?
Ответы
Ответ 1
Оберните столбцы, ссылки на которые объединены в таблицу $$
A.findAll({
where: {
$or: [
{'$B.userId$' : 100},
{'$C.userId$' : 100}
]
},
include: [{
model: B,
required: false
}, {
model: C,
required: false
}]
});
Ответ 2
Я столкнулся с аналогичной проблемой, как xb1tz, и опубликовал это здесь. Но, видимо, это не полезно. Поэтому я отправляю новый вопрос: Sequelize Верхний уровень, где с нетерпеливо загруженными моделями создается дополнительный запрос