2015-11-20 2 views
0

У меня возникли проблемы с созданием отношений «один ко многим» в Parse (js) и запросов к результатам.Отношения во многих отношениях в Parse (js) и вложенных запросах

У меня есть стол для ресторанов и таблица меню. Ресторан может иметь много пунктов меню и они определены как таковые:

Ресторан Таблица
restaurant_name (строка)
адреса (строка)

меню Таблица
menu_item_name (строка)
ресторан (указатель на стол ресторана)

Как бы я мог показать все рестораны и там уважаемые e пунктов меню?

Сейчас я показываю, что это console.log(), но я не уверен, как это сделать. Ниже приведен код, с которым я работал.

<script> 
    function getRestaurants(){ 
    Parse.initialize("...", "...");  
    var Restaurant = Parse.Object.extend("Restaurant"); 
    var Menu = Parse.Object.extend("Menu"); 
    var query = new Parse.Query(Restaurant); 
     query.find({ 
     success:function(results){ 
      for(var i in results){ 
      //second loop- for menu items 
      var query2 = new Parse.Query(Menu); 
      query2.include("restaurant"); 
      query2.find({ 
       success:function(results2){ 
       for(var j in results2){ 

        if(results[i] == results2[j].get("restaurant");){ 
        //display restaurant name and all menu items 

        } 

       } 
       }, error: function(error){ 
       console.log("Query Error"+error.message); 
       } 
      }); 
      } 
     }, 
     error: function(error){ 
      console.log("Query Error"+error.message); 
     } 
     }); 
    } 
    getRestaurants(); 
    </script> 

Edit 1
Как доказательство концепции, я хотел бы показать это на консоли - Примечание: этот пример предполагает, что есть 3 ресторана в таблице и каждая из них содержит 2 пунктов меню. Это не всегда так; количество ресторанов и количество пунктов меню не являются статичными:

Название ресторана 1
- Меню Имя Пункт 1
- Меню Имя Пункт 2

Название ресторана 2
- Меню имя элемента 1
- Меню имя пункт 2

название ресторана 3
- Меню имя пункт 1
- Меню имя пункт 2

ответ

0

Не следует отдельно запрашивать класс Restaurant. Вам просто нужно запросить класс Menu и использовать include на поле указателя restaurant. Это позволит убедиться, что у вас есть все пункты меню, а также подробные сведения о ресторанах с элементами.

Вы должны написать что-то вроде:

var myQuery = new Parse.Query(Parse.Object.extend("Menu")); 
     myQuery.include("restaurant"); 

     var myCollection = []; 


     myQuery.find({ 

     success: function(results){ 

      for(var i = 0; i < results.length; ++i) 
      { 
       // This will get you the restaurant name 
       var rest_name = results[i].get("restaurant").attributes.restaurant_name; 

     if(!myCollection[rest_name]) 
     { 
     // This is the first menu item encountered belonging to this restuarant 


     // Instantiate the array 
     myCollection[rest_name] = []; 

     } 
     else 
     { 
     // You have already encountered a menu item belonging to this restaurant before 
     // Do nothing 
     } 
     myCollection[rest_name].push(results[i].get("menu_item_name")); 




      } 
// This will give you the arrays all filled up with data and you can show it in whatever way you want. 

     } 


     }); 

Edit: Я использовал массив массивов для хранения динамической информации ресторана.

+0

Вы поднимаете некоторые хорошие моменты. Да, количество ресторанов не является статичным, что является одной из частей, с которыми я борюсь. Как мне это сделать? –

+0

@MichaelSmith, одна из альтернатив - использовать массив массивов. Пожалуйста, см. Мое редактирование, как я это сделал. –

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