繁体   English   中英

解析(js)和嵌套查询中的一对多关系

[英]One to many relationship in Parse(js) and nested queries

我在Parse(js)中创建一对多关系并查询结果时遇到了麻烦。

我有一个餐厅表和一个菜单表。 餐馆可以有许多菜单项,它们的定义如下:

餐厅表
restaurant_name(字符串)
地址(字符串)

菜单表
menu_item_name(字符串)
餐厅(指向餐厅桌)

我将如何显示所有餐厅以及相应的菜单项?

现在,我显示的是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>

编辑1
作为概念验证,我想在控制台上显示它-注意:此示例假定表中有3个餐厅,每个餐厅包含2个菜单项。 情况并非总是如此。 餐厅数量和菜单项数量不是静态的:

餐厅名称1
-菜单项名称1
-菜单项名称2

餐厅名称2
-菜单项名称1
-菜单项名称2

餐厅名称3
-菜单项名称1
-菜单项名称2

不要单独查询Restaurant类。 您只需要查询Menu类并在restaurant指针字段上使用include 这样可以确保您拥有所有菜单项以及包含这些项的完整餐厅详细信息。

您应该编写如下内容:

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.

        }


        });

编辑:我已经使用数组的数组来存储动态餐厅信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM