Laravel Eloquent cursor() 内存不足

Laravel Eloquent cursor() out of memory

我对 Laravel 的 ORM Eloquent cursor() 方法有疑问。我正在尝试为我的电子商务创建一些分析功能以获得 orders/income 的数量和类似的东西,您可以在我的代码下方查看:

$fromDate = Carbon::now()->startOfYear()->toDateString();
$tillDate = Carbon::now()->endOfYear()->toDateString();

$orders = Order::cursor()->whereBetween('created_at', [$fromDate, $tillDate])->whereIn('status', array(1, 2, 3))->filter(function ($order) { 
  return $order; 
});
$countO = $orders->count();
$sumO = $orders->sum('total');

$orders = VoucherOrder::cursor()->whereBetween('created_at', [$fromDate, $tillDate])->where('status', 1)->filter(function ($order) {
  return $order;
});
$countV = $orders->count();
$sumV = $orders->sum('total');

$orders = $countO + $countV;
$income = $sumO + $sumV;

if($orders != 0) {
  $avgOrder = $income / $orders;
}
else {
  $avgOrder = 0;
}

return view('admin.income', compact('orders', 'income', 'avgOrder'));

我使用 cursor() 来减少内存使用,因为我正在处理大量数据,但我仍然收到此错误:

Allowed memory size of 536870912 bytes exhausted (tried to allocate 2338688 bytes)

我做错了什么?我该如何解决?

尝试编辑 /etc/php5/fpm/php.ini:

memory_limit = 2048M 重启 nginx:

sudo systemctl restart nginx

如果您想在不编辑 php.ini 文件的情况下减少内存使用,我建议使用 chunk 而不是 cursor()

Model::chunk(250, function ($data) {
    foreach ($d as $data) {
        // your code
    }
});

这将占用更少的内存,但请记住,与 cursor() 相比,这可能会多消耗几秒钟的执行时间。