2015-05-01 10 views
34

Mam złożony zestaw skojarzonych modeli. Modele są powiązane przy użyciu tabel łączenia, z których każdy ma atrybut o nazwie "zamówienie". Muszę mieć możliwość wysłania zapytania do modelu macierzystego "Strona" i włączenia powiązanych modeli oraz posortowania tych powiązań za pomocą pola "zamówienie".Porządkowanie wyników modeli z obciążonymi ładowaniem w węźle Sequelize

Poniżej nie mając wpływu na wyniki porządek sortowania:

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

Irytujące nazewnictwo twoich przykładowych pól. Po pierwsze oba modele są zamawiane na polu o tej samej nazwie. Ta nazwa jest taka sama jak operacja. –

Odpowiedz

65

Wierzę, że można zrobić:

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

I myślę, że robiłem to przez ostatni rok. – brian

+0

kolejność: [[db.Sequelize.col ('order'), 'DESC'], // dla tabeli stron [db.Gallery, 'order', 'DESC'], [db.Gallery, db.ArtWork "zamówienie", "DESC"] ] – Shrikant

10

Jeśli również użyć «za» i powiedzmy, że chcesz zamów przez 'CreatedDate', zapytanie wygląda następująco:

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

Czy to działa również z kluczami obcymi? Dostaję Nieobsługiwane odrzucenie TypeError: Konwertowanie struktury kołowej na JSON w Object.stringify (natywna) w Object.QueryGenerator.quote (/ Users/kristoffer/web/fitch/node_modules/sequelize/lib/dialects/abstract/query- generator.js: 869: 76) – Himmators

+0

Tak, działa w przykładzie "http://stackoverflow.com/questions/38145702/create-composite-index-with-associated-data/38201524#38201524", używając moja deklaracja modele, wystarczy użyć następującego kodu: User.findAll ({ surowy: 'true', obejmują: [ { model: UserAttribute, jak: "UserAttribute" } ], kolejności: [ [ {model: UserAttribute, jako: 'UserAttribute' }, '', userId 'DESC' ] ] }) .Następnie ((użytkowników) => { console.log (, użytkownicy Users) 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

Chociaż ten kod może odpowiedzieć na pytanie, zapewniając dodatkowy kontekst dotyczące _why_ i/lub _how_ to odpowiada pytanie znacząco poprawić jej długoterminowy wartość. Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienie. –

+0

Zamawia tylko chętne ładowanie, a nie moduł zapytań. – Shrikant

Powiązane problemy