我的网上商店基本上有2个Parse类:Product and Order。
当用户装满购物车时,我会在商品的本地数组(javascript对象)中反映出该商品的属性(parse类),并显示该商品在购物车中应具有的数量的另一个属性。

如果现在保存要解析的订单(我使用的是parse-server的自托管开放源代码版本),则最终得到的订单对象是这样的:

{
  "_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可能是多余的,并且产品保留了price属性。当产品添加到订单时,应用程序会将产品价格复制到此字段。这使业务逻辑决策可以在创建订单后更改产品价格的情况下进行处理。

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

关于javascript - 如何在解析中创建嵌套的多对多关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36021467/

10-11 22:52
查看更多