如何在解析中创建嵌套的多对多关系

How to create nested Many to Many relations in parse

本文关键字:嵌套 关系 创建      更新时间:2023-09-26

我的网上商店基本上有 2 个 Parse 类:产品和订单。当用户填满他的购物车时,我反映在本地项目数组(javascript 对象)中,其中包含产品的属性(parse 类)和特定产品在购物车中应具有的数量的另一个属性。

如果我现在保存要解析的订单(我使用的是解析服务器的自托管开源版本),我最终会得到一个如下所示的订单对象:

{
  "_id": "8XK6gbZZvE",
  "items": [
    {
      "amount": 3,
      "product": {
        "__type": "Pointer",
        "className": "Product",
        "objectId": "VWOxzFui6R"
      }
    }
  ],
  "total": 1800,
  "status": "pending",
  ...
}

我的问题是我找不到一种方法来查询结果已经包含产品的订单。

目前能想到的唯一方法是摆脱数量,这样我就不必将产品类嵌套在 JS 对象中。然后,如有必要,只需将产品多次添加到阵列中即可。

像这样:

{
  "_id": "6j7l5acSB3",
  "items": [
    {
      "__type": "Pointer",
      "className": "Product",
      "objectId": "VWOxzFui6R"
    }
  ],
  "total": 1210,
  "status": "processing",
  ...
}

然后,这允许我将项目包含在订单查询中,如下所示query.include('items');

但是,是否也有一个解决方案,如何使用像我的第一个结构并且仍然能够在订单查询中包含产品?如果用户订购了该产品,例如 2 或 3 次,则在阵列中多次使用同一产品感觉有点"多余"。

在大多数电子商务系统中完成此操作的方式是使用另一个对象将数据添加到订单和产品之间的关系中,例如......

// Order
{ lineItems: [ <pointer to line item>, < etc > ],
  orderTotal: number,
  // other fields: probably a customer-pointer, tax, shipping, etc
};
// Line Item - this is the missing concept in the OP
{ product: <pointer to product>,
  unitPrice: number,
  quantity: number
};
// Product as you have it

请注意,unitPrice可能是多余的,价格属性与产品一起保留。 将产品添加到订单时,应用会将产品价格复制到此字段。 这使业务逻辑能够决定在创建订单后产品价格更改时该怎么做。

订单查询可以include('lineItems', 'lineItems.product')