2015-05-01 4 views
34

Ich habe eine komplexe Reihe von verknüpften Modellen. Die Modelle werden mithilfe von Join-Tabellen verknüpft, die jeweils ein Attribut namens "order" haben. Ich muss in der Lage sein, das Elternmodell 'Seite' abzufragen und die zugehörigen Modelle einzubeziehen und diese Assoziationen nach dem Feld 'Reihenfolge' zu sortieren.Bestellresultate von Eager-Loaded-Modellen in Node Sequelize

Das Folgende ist keine Wirkung auf den Ergebnissen der Sortierreihenfolge:

db.Page.findAll({ 
    include: [{ 
    model: db.Gallery, 
    order: ['order', 'DESC'], 
    include: [{ 
     model: db.Artwork, 
     order: ['order', 'DESC'] 
    }] 
    }], 
}) 
+5

Ärgerliche Benennung Ihrer Beispielfelder. Zum einen werden beide Modelle auf einem gleichnamigen Feld bestellt. Dieser Name ist der gleiche wie der Vorgang. –

Antwort

65

Ich glaube, Sie tun können:

db.Page.findAll({ 
    include: [{ 
    model: db.Gallery 
    include: [{ 
     model: db.Artwork 
    }] 
    }], 
    order: [ 
    [ db.Gallery, 'order', 'DESC' ], 
    [ db.Gallery, db.ArtWork, 'order', 'DESC' ] 
    ] 
}) 
+0

Und zu denken, dass ich das im letzten Jahr vermasselt habe. – brian

+0

Ordnung: [[db.Sququelize.col ('Auftrag'), 'DESC'], // für Seitentabelle [db.Gallery, 'Auftrag', 'DESC'], [db.Gallery, db.ArtWork , 'bestellen', 'DESC'] ] – Shrikant

10

Wenn Sie auch ‚als‘ und lassen Sie uns sagen, Sie wollen um von 'CreatedDate', sieht die Abfrage wie folgt:

DbCategoryModel.findAll({ 
    include: [ 
     { 
      model: DBSubcategory, 
      as: 'subcategory', 
      include: [ 
       { 
        model: DBProduct, 
        as: 'product', 
       } 
      ], 
     } 
    ], 
    order: [ 
     [ 
      {model: DBSubcategory, as: 'subcategory'}, 
      {model: DBProduct, as: 'product'}, 
      'createdDate', 
      'DESC' 
     ] 
    ] 
}) 
+1

Soll das auch mit Fremdschlüsseln funktionieren? Ich bekomme Unhandled Ablehnung TypeError: Umwandlung der kreisförmigen Struktur in JSON bei Object.Stringify (native) bei Object.QueryGenerator.quote (/ Benutzer/kristalloffer/web/fitch/node_modules/sequelize/lib/Dialekte/abstrakte/Abfrage- generator.js: 869: 76) – Himmators

+0

Ja, es funktioniert, im Beispiel "http://stackoverflow.com/questions/38145702/create-a-composite-index-with-associated-data/38201524#38201524", mit meine Modelle Erklärung, benutzen Sie einfach den folgenden Code: User.findAll ({ roh: 'true', umfassen: [ { Modell: userattribute, als: "userattribute" } ], Reihenfolge: [ [ { Modell: userattribute, als: 'userattribute' }, , UserID ', 'desc' ] ] }) .then ((Benutzer) => { console.log ('users', Benutzer) process.exit() }) –

2
order: [ 
[ db.Sequelize.col('order'), 'DESC'], /*If you want to order by page module as well you can add this line*/ 
[ db.Gallery, db.ArtWork, 'order', 'DESC' ] 
] 
+1

Obwohl dieser Code die Frage beantworten kann, zusätzlichen Kontext in Bezug auf _why_ und/oder _how_ es beantwortet die Frage deutlich sein würde die Bereitstellung langfristige Wert verbessern. Bitte [bearbeiten] Sie Ihre Antwort, um eine Erklärung hinzuzufügen. –

+0

Es bestellt nur eifrig laden, nicht das abfragende Modul. – Shrikant