【问题标题】:Laravel lazy collection for huge dataLaravel 懒惰收集海量数据
【发布时间】:2019-11-20 07:21:55
【问题描述】:

我正在从表中查询一个大型数据集,然后遍历一个循环来创建一个 json 文件。

$user = App\User::all();

foreach($user as $val){
  // logic goes here for creating the json file
}

现在我面临的问题是,当迭代循环时它正在消耗内存,并且我收到错误“允许的内存大小已用尽”。而且服务器的 cpu 使用率也很高。 我的问题是我应该如何使用 laravel 惰性集合来解决这个问题。我已经浏览了官方文档但找不到方法。

【问题讨论】:

  • 您对foreach 循环中的数据做了什么?你找不到怎么办?
  • 我正在根据某些条件创建一个新数组,然后将该数组转换为 json
  • 当您不断添加到此数组时,它将使用越来越多的内存......您在文档中找不到什么方法?
  • 根据什么条件创建数组? ... 第三个代码块laravel.com/docs/6.x/collections#lazy-collections 展示了如何从查询中获取惰性集合;您不需要 filter 调用(因为这只是一个示例)“但是,查询构建器的 cursor 方法返回一个 LazyCollection 实例。”
  • 如果你需要迭代你需要迭代数据的数据,你不只是摆脱它......在文档中它从cursor方法获取惰性集合然后它使用foreach 循环对其进行迭代

标签: laravel laravel-6


【解决方案1】:

只需将all 方法替换为cursor 方法即可。

$user = App\User::cursor();

foreach($user as $val){
  // logic goes here for creating the json file
}

更多可以链接的方法请参考官方documentation

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    相关资源
    最近更新 更多