【发布时间】: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循环对其进行迭代