大卫·博恩 / laravel-lazychunk
1.0.1
2020-10-13 11:36 UTC
Requires
- php: >=7.3
- illuminate/database: ^6.0|^7.0|^8.0
- illuminate/support: ^6.0|^7.0|^8.0
Requires (Dev)
- laravel/legacy-factories: ^1.0.4
- orchestra/testbench: ^4.6|^5.0|^6.0
- phpunit/phpunit: ^8.5
This package is auto-updated.
Last update: 2024-09-17 06:06:07 UTC
README
此库添加了使用懒集合处理分块查询结果的能力。
动机
自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']);