2016-03-28 18 views
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ń?

Odpowiedz

23

zawinąć kolumn odniesienia połączonych tabel w $$

A.findAll({ 
    where: { 
     $or: [ 
      {'$B.userId$' : 100}, 
      {'$C.userId$' : 100} 
     ] 
    }, 
    include: [{ 
     model: B, 
     required: false 

    }, { 
     model: C, 
     required: false 
    }] 
}); 
+4

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

+11

Czy jest gdzieś gdzieś dokumentowana składnia $$? –

+0

Bardzo przydatna funkcja, nie znalazłem jej na dokumentach. – renatoargh