2016-04-07 13 views
2

Dies ist die Situation:LoopBack acces ein anderes Modell

ich meine Datenbank mit 3 Modellen bekam:

Pokemon/PokemonType/Typ

A Pokemon durch die PokemonType einem oder mehreren Typen verknüpft ist.

So nun möchte ich eine Funktion, um die Typen der gegebenen Pokemon verbunden zu bekommen:

module.exports = function(Pokemon) { 


    Pokemon.types = function(id, cb){ 
     var PokemonType = Pokemon.app.models.pokemonType.find(); 
     var Type = Pokemon.app.models.type.find(); 
     var arrayTypes = []; 

     // var result = app.models.pokemonType.find({where : {"pokemon_id": id}}); 
//  for(var x in result){ 
//   var typeId = x.pokemonType_id; 
//   var results = Type.find({where: {"id": typeId}}); 
//   arrayTypes.push(results); 
//  } 
     cb(null, PokemonType[0] + " AND " + Type); 
    } 

    Pokemon.remoteMethod(
     'types', { 
      accepts: {arg: 'id', type:'number', required:true, http: { source: 'header' }}, 
      returns: {arg: 'types', type:'object' }, 
      http: {path: '/types', verb: 'get', status: 200, errorStatus: 400} 
     } 
    ); 
}; 

Ich versuche, die Typen aus dem Ergebnis der PokemonType Tabelle zu finden. Wenn es also eine Zeile mit der aktuellen PokemonID ​​gibt, möchte ich den Typ, der zu dieser PokemonType-Zeile gehört, aus der Type-Tabelle entfernen.

Wenn ich jedoch versuche, dies mit den Modellen zu tun, bekomme ich undefined und [Objekt Objekt].

Ich weiß, dass wenn ich Pokemon.find verwende, es die Tabelle verwendet, um nach dem Pokemon zu suchen, aber hat es dieselbe Instanz, wenn ich nach dem PokemonType mit der angegebenen PokemonID ​​suche? Oder denke ich völlig falsch?

Was meine ich? Ich erwarte, dass dies:

Pokemon.find({where: { "id": id}}); 

aber mit der richtigen Antwort:

PokemonType.find({where :{ "pokemon_id": id}}); 

die gleichen wie handeln.

Wie behebe ich das undefinierte Problem? Und wie bekomme ich dann die richtigen Typen mit dem Pokemon verlinkt?

Antwort

0

Lösung gefunden:

Pokemon.types = function(id, cb){ 
     var PokemonType; 
     var curPokemon = {"pokemon":null, "type": null}; 
     var Type; 
     var arrayTypes = new Array(); 
     var count; 

     Pokemon.find({where: {"id": id}}) 
     .then(result => { 
      if(result.length > 0){ 
       curPokemon.pokemon = result[0]; 
       Pokemon.app.models.pokemonType 
       .find({where:{"pokemon_id": id}}) 
       .then(result => { 
        count = result.length 
        result.forEach(function(item, index){ 
         Pokemon.app.models.type 
         .find({where:{"id": item.type_id}}) 
         .then(result => { 
          if(result.length > 0){ 
           arrayTypes.push(result[0]); 
           if(arrayTypes.length == count){ 
            curPokemon.type = arrayTypes; 
            cb(null, curPokemon); 
           } 
          } 
         }); 
        }); 
       }); 
      } 
     }); 
    } 

von MainModel.app.models.ModelIWant verwendet, kann ich das richtige Modell Instanz erhalten. Dann benutze die .find und benutze meine Logik im Versprechen (.then).

Dies ermöglichte mir, die richtigen Ergebnisse zu erhalten und dann diese Ergebnisse zu verwenden, um die richtigen Daten zu erhalten. Dann, indem ich ein eigenes Modell (Objekt) mit dem curPokemon mache, könnte ich das Ergebnis modifizieren, so dass es die gewünschten Daten zum MainModel hinzufügen würde.

Verwandte Themen