2016-11-28 2 views
0

Я работаю над проектом, где у меня есть эти сущности: регион, сообщения и связь между регионом и сообщениями. В этой ссылке я также могу настроить некоторые дополнительные свойства, например, если сообщение может отображаться более одного раза для региона и если есть предварительное сообщение, которое должно быть показано ранее.AngularFire: как запускать запросы присоединения

Моя основная концепция базы данных: enter image description here

Ниже, как я делаю свою базу данных: enter image description here

Я хотел бы быть в состоянии показать список с именем сообщения, шоу и флаг имя обязательного сообщения, если оно заполнено.

Я использую объект $ firebaseArray делать мои регулярные списки, и я видел примеры того, как делать запросы, когда у вас есть структура вроде этого:

"region_messages":{ 
    "xxxxxxx":true, 
    "yyyyyyy":true 
} 

Как я мог бы сделать в моем случае , моя структура сложнее. Я пытаюсь запросить использование углового огня, и мне нужно будет сделать то же самое в Swift 3.

Спасибо за помощь!


Вот мое дерево в JSON случае, если вы хотите запустить несколько тестов:

{ 
    "messages" : { 
    "-KXSIeKHTM4lMRbeey2k" : { 
     "active" : true, 
     "name" : "link", 
     "type" : 3, 
     "url" : "http://www.google.com" 
    }, 
    "-KXSIi_qw369nfU28lJJ" : { 
     "active" : true, 
     "name" : "video", 
     "type" : 4, 
     "url" : "http://www.youtube.com" 
    } 
    }, 
    "region_messages" : { 
    "-KXfZYP8e--ZUgaVM9iL" : { 
     "-KXSIeKHTM4lMRbeey2k" : { 
     "pre_requisite_message_id" : "", 
     "show_only_once" : false 
     }, 
     "-KXSIi_qw369nfU28lJJ" : { 
     "pre_requisite_message_id" : "-KXSIeKHTM4lMRbeey2k", 
     "show_only_once" : true 
     } 
    } 
    }, 
    "regions" : { 
    "-KXfZYP8e--ZUgaVM9iL" : { 
     "major" : 1, 
     "name" : "Region 1" 
    } 
    } 
} 
+0

См. Http://stackoverflow.com/questions/30299972/joining-data-between-paths-based-on-id-using-angularfire –

+0

@FrankvanPuffelenI видел это перед тем, как спросить, поэтому я поставил кусок json в конец моего вопроса. Это не одно и то же, хотя я пытаюсь использовать NormalizedCollection –

+0

Это действительно другое соединение, чем может обрабатывать Normalized Collection. Но другой вариант в этом ответе должен работать так, как я могу видеть: вам нужно будет расширять '$ firebaseArray'. –

ответ

1

Я следовал инструкциям в this video и мне удалось решить эту проблему. Мне кажется странным, что я буду делать последующие звонки, но я думаю, что с ним не так много проблем. Функция:

$scope.getMessagesByRegion = function(regionId){ 

    var rootRef = firebase.database().ref(); 
    var regionMessagesRef = rootRef.child("region_messages/"+ regionId); 
    $scope.messages_by_region = []; // Here I reset the scope variable 

    regionMessagesRef.on('child_added', function(rmSnap) { 

     var messageRef = rootRef.child("messages/"+rmSnap.key); 
     messageRef.once('value').then(function(msgSnap){ 

      var msg = { 
       key : msgSnap.key, 
       name : msgSnap.val().name, 
       type : $scope.getTypeName(msgSnap.val().type), 
       show_only_once : rmSnap.val().show_only_once, 
       pre_requisite_message : rmSnap.val().pre_requisite_message 
      } 

      $scope.$apply(function(){ 
       $scope.messages_by_region.push(msg); 
      }); 
     }) 

    }); 
} 

Для быстрой (iOS) мне пришлось сделать то же самое. Показатель покажется хорошим.

Смежные вопросы