webit/doctrine-orm-query-builder-iterator

2.0.2 2023-11-18 14:49 UTC

This package is auto-updated.

Last update: 2024-09-18 16:35:58 UTC


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