2016-04-07 23 views
2

acces.loopback Bu durum başka modeli

Yani şimdi bir işlev verilen Pokemon bağlantılı türleri almak istiyorum: Ben PokemonType tablonun sonucundan türlerini bulmaya çalışıyorum

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} 
     } 
    ); 
}; 

. Geçerli PokemonID ​​ile 1 satır varsa, bu PokemonType satırına ait türün Tür tablosundan çıkmasını istiyorum.

Bununla birlikte, modellerle bunu yapmaya çalışırken, tanımlanamayacağım ve [object Object] almaya devam ediyorum.

Eğer Pokemon.find'i kullanırsam, Pokemon'u aramak için tabloyu kullanırım, ama PokemonType'ı PokemonID ​​ile aradığımda aynı örneği aldığını biliyorum. Yoksa tamamen yanlış mı düşünüyorum?

Ne demek istiyorsun?

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

ancak doğru cevabı olan:

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

aynı davranmaya: Bunu bekliyoruz.

Tanımlanmamış bir sorunu nasıl giderebilirim? Ve sonra Pokemona bağlı doğru türleri nasıl alabilirim? Bulunan

cevap

0

Çözüm:

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); 
           } 
          } 
         }); 
        }); 
       }); 
      } 
     }); 
    } 

MainModel.app.models.ModelIWant kullanarak Doğru modeli örneği alabilirsiniz. Ardından .find'i kullanarak ve mantığımı sözümün içinde kullanın (.then).

Bu, doğru sonuçları almamı sağladı ve doğru sonuçları almak için bu sonuçları kullanabildim. Daha sonra curPokemon ile kendi modelini (nesneyi) yaparak sonuca varabilirdim, böylece istediği verileri MainModel'e eklerdi.