2016-04-21 8 views
0

Ich versuche zu verstehen, wie Sie am besten eine Abfrage über mehrere Entitäten mit Sequelize und Node.js durchführen.Sequelize und Abfrage komplexer Beziehungen

Ich habe ein Modell "Benutzer" definiert, das eine "anyToMany" -Beziehung mit einem Modell "Location" hat. Ich habe dann ein Modell "Asset", das auch eine "anyToMany" Beziehung mit "Location" hat. Wenn ich eine Instanz eines Benutzers habe, möchte ich alle Assets abrufen, die den Standorten zugeordnet sind, mit denen der Benutzer verknüpft ist.

Ich habe versucht, die folgenden, nicht zu funktionieren scheinen ...

user.getLocations().then(function(userLocations) { return Asset.findAll({ where: { "Locations" : { $any : userLocations } }) }) 

jemand irgendwelche Vorschläge bieten könnte?

Antwort

1

Diese Abfrage:

User.findById(user_id, { 
    include: [{ 
     model: Location, 
     required: true 
    }] 
}).then(user => Asset.findAll({ 
    where: { 
     user_id: user.id, 
     location_id: { 
      $in: user.locations.map(location => location.id) 
     } 
    } 
})).then(assets => { 
    // The rest of your logic here... 
}); 
+0

Dank. Dies brachte mich in die richtige Richtung. Außerdem musste ich im "include" explizit "as" angeben, da ich beim Definieren der Relation "as" angegeben hatte. Da ich auch eine Eins-zu-viele-Beziehung zwischen Asset und Locations hatte, musste ich bei der Abfrage der Assets auch Locations angeben. Ich werde die letzte Abfrage als separate Antwort anhängen. – Michael

0

Dies war das Endergebnis ...

User.findById(user_id, { 
    include: [{ 
     model: Location, 
     as: 'Locations', // Was needed since the original relation was defined with 'as' 
     required: true 
    }] 
}).then(user => Asset.findAll({ 
    include: [{ 
     model: Location, 
     as: 'Locations', 
     where: { 
      id: { 
       $in: user.Locations.map(location => location.id) 
      } 
     } 
    }] 
})).then(assets => { 
    // The rest of your logic here... 
}); 
Verwandte Themen