13
chcę się zapytać jak to z sequelize ORM:Jeżeli warunek połączonej tabeli w 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')
Problemem jest to, że sequelise nie pozwalając mi odwołać „B” lub tabelę „C” w klauzuli WHERE . Poniższy kod
A.findAll({
include: [{
model: B,
where: {
userId: 100
},
required: false
}, {
model: C,
where: {
userId: 100
},
required: false
}]
]
daje mi
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
która jest zupełnie inna zapytań, a wynikiem
A.findAll({
where: {
$or: [
{'"B"."userId"' : 100},
{'"C"."userId"' : 100}
]
},
include: [{
model: B,
required: false
}, {
model: C,
required: false
}]
]
nie jest nawet ważne zapytania:
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')
Czy pierwszy zapytanie jest możliwe nawet z sequelizem e, czy powinienem trzymać się surowych zapytań?
To wszystko zawiedzie, jeśli dodam kolejny to, że jest '{wymagane: true}'. Następnie sequelize tworzy podzapytanie z INNER JOIN i umieszcza w nim klauzulę WHERE. Dlatego generuje nieprawidłowe zapytanie. WYBIERZ "A". * OD (SELECT * od "A" INNER join "D" on "a". "Czy" = "D". "Id" GDZIE ("A", "B .userId "= '100' LUB" A "." C.userId "= '100') ) jako" A " LEFT OUTER DOŁĄCZ DO" B "ON" A "." bId "=" B "." id " LEFT OUTER DOŁĄCZ" C "NA" A "." cId "=" C "." id " Jakieś sugestie, jak rozwiązać ten problem? – xb1itz
Czy jest gdzieś gdzieś dokumentowana składnia $$? –
Bardzo przydatna funkcja, nie znalazłem jej na dokumentach. – renatoargh