Sequelize - Unterabfrage in der where-Klausel

Ich bin mit Sequelize in meiner Express-app. Ich brauche generieren eine Abfrage, die eine Unterabfrage in der WHERE - Klausel.

SELECT *
  FROM MyTable
 WHERE id NOT IN (
       SELECT fkey
         FROM MyOtherTable
        WHERE field1 = 1
          AND field2 = 2
          AND field3 = 3
       )

Zuerst habe ich versucht die Beziehungen/Assoziationen durch meinen Modellen, aber konnte es nicht zu funktionieren. So etwas wie:

MyTable.find( {
    where: {
        id: {
            $notIn: //<= what goes here? Can I somehow reference my include model?
        }
    },
    include: [ {
        model: MyOtherTable,
        where: {
            field1: 1,
            field2: 2,
            field3: 3
    } ]
} );

Dann habe ich versucht, mit Sequelize.where() kein Glück gibt.

Dann habe ich versucht Sequelize.literal() und das funktioniert aber nicht sicher, ob es ein "richtige" Weise zu tun, die eine Unterabfrage in einer where-Klausel in Sequelize, wie ich bin neu für ihn.

MyTable.find( {
    where: {
        id: {
            $notIn: sequelize.literal( 
                '( SELECT fkey ' +
                    'FROM MyOtherTable ' +
                   'WHERE field1 = ' + field1 +
                    ' AND field2 = ' + field2 +
                    ' AND field3 = ' + field3 + 
                ')'
        }
    } 
} );

Ich weiß auch, dass ich verwenden könnte Sequelize.query() aber weiß wirklich nicht, ob ich sollte für Sie zu erreichen, oder wenn literal()ist der richtige Weg, wie ich das Gefühl, es gibt etwas, das ich im Blick.

Ich würde wirklich gerne wissen, wie Sie ausführen, die eine Unterabfrage in einen WHERE Klausel mit Sequelize die "richtige" Weg.

Danke für das feedback!

  • Blick auf ALSO kam ich zu der github issue github.com/sequelize/sequelize/issues/3961, über diese Frage stackoverflow.com/questions/38882185/..., und anscheinend mit sequelize.literal ist der einzige Weg für die Zeit.
  • Scheint wie mit sequelize.literal(...) ist immer noch der Weg zu gehen
  • Ich fand das src, der kann dir helfen (UNGETESTET). lassen Sie mich wissen, Ihre Prüfung, nachdem Sie Folgen Sie diesem srlm.io/2015/02/04/sequelize-Unterabfragen
  • wäre nicht diese Lösung ermöglicht sql-injection?
  • abhängig von der Quelle der field1, field2, field3 und/oder, wenn Sie schon sanitized/entkommen. Für dieses Beispiel werden die Werte definiert, die sich auf das backend.
  • Ich habe ein Beispiel-snippet, wie ich es mein code. Es ist ein anderer Ansatz weiter.

InformationsquelleAutor hungerstar | 2016-03-22
Schreibe einen Kommentar