Php json编码Laravel中的嵌套关系时出现性能问题

Php json编码Laravel中的嵌套关系时出现性能问题,php,json,laravel,Php,Json,Laravel,我使用Laravel(5.2)雄辩的ORM从数据库中获取数据,如下所示: $orders = Order::with([ 'customer', 'items', 'items.product', 'items.product.shop' => function ($query) { $query->select(['id', 'title']); } ])->get(); 注意:订单未绑定到单个店铺的原因是订单可能包含

我使用Laravel(5.2)雄辩的ORM从数据库中获取数据,如下所示:

$orders = Order::with([
    'customer',
    'items',
    'items.product',
    'items.product.shop' => function ($query) {
        $query->select(['id', 'title']);
    }
])->get();
注意:订单未绑定到单个店铺的原因是订单可能包含来自多个店铺的项目。每个项目都引用了订购的产品,而订购的产品又引用了它所属的商店

这很好,但是,当我想将结果返回到一个视图并在那里渲染时,对它进行
json\u编码需要很长时间

我确认
json\u encode
确实是瓶颈,如果我只是执行查询,然后立即死亡,那么响应几乎是即时的。但是,如果在查询后执行
$orders->toJson()
(或
json\u encode($orders)
),我会遇到与将结果返回到视图相同的响应延迟

显然,问题在于
items.product.shop
的嵌套属性(太深了?),如果我删除该属性,调用
json\u encode
不会导致任何性能问题

以下是单个订单的示例输出:

{
  "id": 71,
  "total_sum": "5.88",
  "customer": {
    "id": 68,
    "first_name": "One Large",
    "last_name": "Men's"
  },
  "items": [
    {
      "id": 105,
      "quantity": "1",
      "price_single": "1.2",
      "price_total": "1.2",
      "color_id": "6",
      "size_id": "5",
      "order_id": "71",
      "product": {
        "id": 149,
        "name": "Men's",
        "shop": {
          "id": 109,
          "title": "general test"
        }
      }
    }
  ]
}

找到罪魁祸首后,我在我的
商店
模型(通过
$appends
添加)中有一个附加属性,该属性通过使用嵌套for循环进行计算


显然,在直接处理商店时速度仍然足够快,但由于在上面的示例中,每个订单都有多个项目,并且每个项目都引用了一个商店,因此性能会下降。

找到了罪魁祸首,我在我的
商店
模型中有一个附加属性(通过
$appends
添加)通过使用嵌套for循环计算的


显然,在直接处理商店时,速度仍然足够快,但由于在上面的示例中,每个订单都有多个项目,并且每个项目都引用了一个商店,因此性能会下降。

如果从
商店
加载中删除自定义选择,是否会加快速度?否,它存在的原因实际上是因为我认为
shop
(如
description
)中的某些属性可能会导致性能问题,因为它们包含大量文本。但是,只选择两个属性没有帮助。我也可以做
dump($orders)很好,性能问题只有在我介绍
json\u encode($orders)
时才会出现。您是否尝试过
json\u encode($orders->toArray())?我不确定它是否会有很大的不同,但我对使用to array修复的雄辩模型有问题。如果从
商店
加载中删除自定义选择,是否会加快加载速度?不,它存在的原因实际上是因为我认为
商店
中的某些属性(如
description
)可能会导致性能问题,因为它们包含大量文本。但是,仅选择两个属性没有帮助。我还可以执行
dump($orders);
很好,只有在我引入
json\u encode($orders)
时才会出现性能问题。您是否尝试过
json\u encode($orders->toArray())
?我不确定它是否会有很大的不同,但我对使用数组修复的雄辩模型有一些问题。