如何在Laravel中分页多个模型而不会过度占用内存

当我使用大型数据集时,我正在尝试找出在laravel中进行分页的最佳方法,我现在使用的方法是过度消耗内存。这就是我正在做的事情:我从多个表查询,映射结果等,然后合并多个集合,只有在那之后才对它进行分页,但是我意识到这确实是一个很糟糕的方法,因为我毫无疑问地查询大量数据的方式,并且随着数据的增长,它将变得越来越慢。 问题是正确的方法是什么? 我以为也许我会分页然后使用数据,问题是,例如,如果我尝试按日期对所有合并的数据进行排序,那么我将无法获得正确的结果,因为一个表可能包含的数据少于另一个...

以下一些代码可帮助您澄清问题

首先我将查询两个表订单表和交易表

$transactions = Transaction::all();
$orders = Order::all();

然后我将全部内容发送到一个动作中,以使用laravel资源将其全部映射并格式化为所需的方式

return $history->execute(['transactions' => $transactions,'orders' => $orders]);

此操作要做的就是简单地映射所有交易并返回资源,然后它将映射所有订单并为其返回资源,之后它将全部合并并返回结果。

然后我将所有这些内容通过使用Illuminate \ Pagination \ LengthAwarePaginator类的分页操作运行。

结果正是我希望它们只是内存过载的方式。

我尝试先分页而不是

$transactions = Transaction::all();
$orders = Order::all();

我做了

$transactions = Transaction::orderBy('created_at' 'desc' )->paginate($request->PerPage); 
$orders = Order::orderBy('created_at' 'desc' )->paginate($request->PerPage); 

,然后通过返回资源的操作运行它。 这样做有几个问题,首先,我将不再获取分页数据,因此应用程序将不知道当前页面或有多少条记录,其次,例如,如果orders表有2条记录,并且交易表有10条记录,尽管订单表的日期晚于交易表的日期,但仍然会先查询它们。

bcp123 回答:如何在Laravel中分页多个模型而不会过度占用内存

使用chunk方法或paginate 阅读文档。

本文链接:https://www.f2er.com/2889269.html

大家都在问