2016-08-04 21 views
0

Ich habe eine erste Abfrage, wo ich eine Liste von Objekten erhalten wie folgt aussehen:js sequelize Nest Abfragen/Schleife durch Ergebnisse

{ 
    id 
    idmarker 
    idcategory 
} 

MarkerCategories.findAll({where: {idmarker: data.dataValues.id}}) 

Das bin ich ein Resultset mit den CategoryIDs der bereitgestellten Marker-ID gehören, erhalten würde. Wie kann ich die id Eigenschaften des Suchresultates in ein Array mit dem Namen-IDs speichern, so kann ich die folgende Abfrage ausführen, um die tatsächliche Kategorie Details zu erhalten:

Categories.findAll({where: {id: { $in: ids}}}); 

Antwort

0

Wenn Sie bereits Assoziation zwischen Categories und Markers Modelle definiert haben, Sie können nur folgendes tun:

Markers.findAll({where: { id: markerId }, include: [ Categories ]}) 

, die eine Markierung mit einer verwandten Kategorien

+0

ich bin nicht 100% sicher, wie die Einrichtung der Verbindung mit meiner aktuellen Tabellenstruktur zurück: 'Marker {id, name} Kategorien {id, name} markers_categories {id, idmarker, idcategory} ' Allerdings fand ich die folgende Lösung in der Zwischenzeit: 'Rückkehr MarkerCategories.findAll ({where: {idmarker: data.dataValues.id}}). then (Funktion (Daten)) { var ids = new Array(); data.map (item => ids.push (item.dataValues.idcategory)); Rückgabe Categories.findAll ({wo: {id: {$ in: ids}}}); }); ' – Chris

+0

Ihre Lösung wird funktionieren, aber es ist ein falscher Weg: Es wird 2 Abfragen ausführen; Größe des Codes; Der richtige Weg ist die Definition der Assoziation und die Verwendung von Includes als Code oben. Ihre Assoziation sieht folgendermaßen aus: 'Markers.belongsToMany (Kategorien, {through: MarkerCategories, foreignKey: idmarker, otherKey: idcategory});'. Weitere Informationen finden Sie unter http://docs.sequelizejs.com/en/latest/docs/associations/#belongs-to-many-associations –