【问题标题】:order result of eloquent relationship from eloquent relationship too雄辩关系的排序结果也是雄辩的关系
【发布时间】:2021-12-15 00:46:34
【问题描述】:

我正在为食堂项目中的订单创建功能。我已经建立了这些雄辩的关系:

  • 食堂->产品
  • 产品->食堂
  • 订单->产品
  • order_product->product(order_product 类似于订单的明细项)

如果要获取order_product的食堂数据,输入order_product->product->canteen->id即可。

这是我为显示订单详细信息所做的。但是这些列表不是按食堂编号排序的。所以,我希望 order->products 的雄辩关系返回由 canteen_id 订购的订单的产品。有人对此有解决方案吗?

【问题讨论】:

    标签: laravel eloquent relationship


    【解决方案1】:

    我不认为你可以使用你当前的方法(或使用 Eloquent 方法)来实现它,因为对象的父对象是 OrderProduct 并且每个 Canteen 都在 OrderProduct 内,所以如果你使用 Eloquent 应用订单,它只会为每个 OrderProduct 订购它,而不是全局订购。举例说明:

    {
       order_products: [
          {
             id: 1,
             canteen: {
                id:1
             }
          },
          {
             id: 2,
             canteen: {
                id:3
             }
          },
          {
             id: 3,
             canteen: {
                id:2
             }
          }
       ]
    

    如果您按照上述格式应用 order by,它将保持不变,因为:(1) 您只有 1 个 Canteen 对象,以及 (2) 如果您与 Canteen 有一对多关系,它只会单独对Canteen 的 id 进行排序。因此,您要查找的格式可能与此类似:

    [
       {
          canteen_id: 1,
          order_product_id: 2
       },
       {
          canteen_id: 2,
          order_product_id: 3
       },
       {
          canteen_id: 3,
          order_product_id: 1
       }
    ]
    

    这样,您可以在整个列表中对Canteen 的 id 进行全局排序。有两种方法可以实现这一点。第一个是从Canteen 模型中获取数据,然后通过OrderProduct 工作。或者,您可以使用原始查询样式,这样您就可以创建自己的对象(它不再像 Eloquent 提供的那样进行分组)并按 Canteen 的 id 对其进行排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      • 2014-08-27
      相关资源
      最近更新 更多