Добавить данные реляционного запроса в основной результат JSON

0

в моем приложении Angular я пытаюсь отобразить набор результатов, которые поступают из трех классов. Данные хранятся на Parse.com.

Я могу отлично справиться с типом отношения Pointer для взаимно однозначного (возвращаются связанные баллы).

Проблема начинается, когда я пытаюсь включить данные из класса Location в мой последний возвращенный JSON.

Надеюсь, это просто базовая нотация, которую я пропускаю. Большое спасибо!

Врачи

  • Строка: имя
  • Указатель: оценка
  • Связь: местоположение

множество

  • Номер: scoreOne
  • Номер: scoreTwo

Места

  • Строка: имя
  • Строка: адрес

      .controller('BrowseCtrl', function($scope) {
    
            // Get "Doctors" and associated "Scores"
            // via Pointer in Doctors Class named "score"
            var query = new Parse.Query("Doctors");
            query.include("score");
            query.find()
            .then(function(result){
    
              var doctorsArray = new Array();
    
              for(i in result){
    
                var obj = result[i];
    
                var doctorIds = obj.id;
                var docFirstname = obj.get("firstname");          
                var mainScore = obj.get("score").get("mainScore");
    
                doctorsArray.push({
                  Scores:{
                    DocMainScore: mainScore
                  },
                  firstname: docFirstname,
                });
    
    
              }
    
              // Get Locations.
              // -can be more than one per Doctor
              // Class Doctors has a Relation column "location" pointing to Locations
              var locationsArray = new Array();
              var locationRelation = obj.relation('location');
              var locationQuery = locationRelation.query();
    
              locationQuery.find({
                success: function(locations) {
                  for(j in locations){
                   var locObj = locations[j];
                   var locName = locObj.get("name"); 
                   console.log(locName);
                 }
               }
             })
    
              // send data to the view
              $scope.myData = doctorsArray;
              console.log(doctorsArray);
            });
          })
    

То, что я пытаюсь сделать, - это получить данные из локаций в doctorArray.

Теги:
parse.com

1 ответ

1
Лучший ответ

Прежде всего, вы используете obj вне поля for, где он был назначен. Таким образом, он получит только место для последнего документа, я уверен, что это не то, что вы хотели.

То, что вы хотите, должно быть примерно так:

// inside your Doctors query result

Parse.Promise.when(

  // get locations for all doctors
  result.map(function(doc) {
    return doc.relation('location').query().find();
  })

).then(function() {
  var docsLocations = arguments;

  // then map each doctor
  $scope.myData = result.map(function(doc, i) {
    // and return an object with all properties you want
    return {
      Scores: {
        DocMainScore: doc.get('score').get('mainScore')
      },
      firstname: doc.get('firstname'),
      locations: docsLocations[i]
    };
  });

});
  • 0
    Это работает при добавлении данных в тот же JSON, но проблема в том, что он возвращает объект адреса только для первого объекта «Доктор». Спасибо за вашу помощь!
  • 0
    Хорошо, я думаю, что вы редактировали код, а я использовал немного предыдущую версию. Позвольте мне приспособиться к вашему редактированию.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню