webit / doctrine-orm-query-builder-iterator
2.0.2
2023-11-18 14:49 UTC
Requires
- php: >=8.1
- doctrine/orm: ^2.4.0
Requires (Dev)
- phpspec/prophecy-phpunit: ^v2.0.2
- phpunit/phpunit: ^10.4
- symfony/cache: ^6.3
- symfony/uid: ^6.3
README
允许分批迭代查询构建结果
安装
composer require webit/doctrine-orm-query-builder-iterator=^2.0.0
使用
QueryIterator 实现方式
该实现方式使用 limit / offset 参数遍历给定的查询。
<?php use Webit\DoctrineORM\QueryBuilder\Iterator\QueryIterator; /** @var \Doctrine\ORM\EntityManagerInterface $entityManager */ $queryBuilder = $entityManager->getRepository('MyEntity')->createQueryBuilder(); $queryBuilder->orderBy('a.ble', 'DESC'); $iterator = new QueryIterator( $queryBuilder, 20, // iterates in 50 elements batches (50 by default) ['MyEntity'], // clears entity manager before getting next batch (by default clears the whole entity manager) ); foreach ($iterator as $entity) { // do your stuff with the entity }
IdsIterator 实现方式
该实现方式使用预先获取的标识符列表遍历给定的查询。
<?php use Webit\DoctrineORM\QueryBuilder\Iterator\IdsIterator; /** @var \Doctrine\ORM\EntityManagerInterface $entityManager */ $queryBuilder = $entityManager->getRepository('MyEntity')->createQueryBuilder(); $queryBuilder->orderBy('a.ble', 'DESC'); $iterator = new IdsIterator( $queryBuilder, 'a.id', // the ID field 20, // iterates in 20 elements batches (50 by default) ['MyEntity'], // clears entity manager before getting next batch (by default clears the whole entity manager) ); foreach ($iterator as $entity) { // do your stuff with the entity }
测试
composer install ./vendor/bin/phpunit