大卫·博恩/laravel-lazychunk

1.0.1 2020-10-13 11:36 UTC

This package is auto-updated.

Last update: 2024-09-17 06:06:07 UTC


README

Run tests

此库添加了使用懒集合处理分块查询结果的能力。

动机

自Laravel 6以来,存在懒集合,这是一种在生成数据上使用集合接口的好方法。

这些的主要用途之一是数据库查询游标。这允许像处理所有结果都已获取一样处理查询结果,但仅使用一个查询和小的内存占用。

这些游标的问题是,预加载关系不起作用。因为始终只有一个结果在手,每个预加载都由一个查询解决。

因此,如果你正在处理使用关系的较大数据集,你仍然会卡在chunk()chunkById()上。

不幸的是,这些仍然是闭包方法,而这个库改变了这一点。

用法

使用这个库,你将获得两个新的查询构建器方法

Builder::lazyChunk($count, callable $callback = null): LazyCollection;

Builder::lazyChunkById($count, callable $callback = null, $column = null, $alias = null): LazyCollection;

主要区别在于,这两种方法现在都返回解决块懒集合。回调现在是可选的。你现在可以这样做

Article::with('author')->lazyChunk($chunkSize)->flatten(1)->map([$this, 'handleEachArticle']);

你可以处理那里的文章,就像你一次性通过一个查询获取所有这些文章一样,并且能够使用预加载的好处。但是,由于我们使用分块处理,我们不会一次性加载所有结果,从而降低内存使用。实际上,将块扁平化以获取元素本身的使用案例被认为是主要用途。因此,此库提供了flatLazyChunk别名

Article::with('author')->flatLazyChunk($chunkSize)->map([$this, 'handleEachArticle']);