13
ich Abfrage wie folgt mit sequelize ORM erhalten möchten:Wo Bedingung für verknüpfte Tabelle in 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')
Das Problem ist, dass sequelise dass ich nicht in where-Klausel „B“ oder „C“ Tabelle referenzieren . Folgenden Code
A.findAll({
include: [{
model: B,
where: {
userId: 100
},
required: false
}, {
model: C,
where: {
userId: 100
},
required: false
}]
]
gibt mir
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
, die ganz andere Frage ist, und das Ergebnis der
A.findAll({
where: {
$or: [
{'"B"."userId"' : 100},
{'"C"."userId"' : 100}
]
},
include: [{
model: B,
required: false
}, {
model: C,
required: false
}]
]
ist nicht einmal eine gültige Abfrage:
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')
Ist zuerst Abfrage sogar möglich mit Sequeliz e, oder sollte ich einfach bei rohen Abfragen bleiben?
Alles schlägt fehl, wenn ich hinzufügen, ein anderes umfassen, ist, dass '{required: true}'. Sequelize macht dann Unterabfrage mit INNER JOIN und setzt die WHERE-Klausel hinein. Daher wird eine ungültige Abfrage generiert. SELECT "A". *, FROM (SELECT * von "A" INNER JOIN "D" ON "A". "Did" = "D". "Id" WHERE ("A". "B .userId "= '100' ODER" A "." C.userId "= '100') ) als" A " LINKER AUSSENBEREICH" B "AUF" A "." BId "=" B "." ID " LINKS OUTER JOIN" C "ON" A "." cId "=" C "." id " Irgendwelche Vorschläge, um dies zu lösen? – xb1itz
Ist diese $$ Syntax irgendwo dokumentiert? –
Super nützliche Funktion, habe es nicht auf Dokumente gefunden – renatoargh