1. Go to this page and download the library: Download setono/doctrine-orm-batcher library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
setono / doctrine-orm-batcher example snippets
use Doctrine\ORM\EntityManagerInterface;
/** @var EntityManagerInterface $em */
$qb = $em->createQueryBuilder();
$qb->select('o')->from(Product::class, 'o');
# OR even simpler:
# $qb = $productRepository->createQueryBuilder('o');
use Setono\DoctrineORMBatcher\Batch\RangeBatch;
use Setono\DoctrineORMBatcher\Batcher\Collection\ObjectCollectionBatcher;
use Setono\DoctrineORMBatcher\Batcher\Collection\IdCollectionBatcher;
use Setono\DoctrineORMBatcher\Batcher\Range\NaiveIdRangeBatcher;
use Setono\DoctrineORMBatcher\Batcher\Range\IdRangeBatcher;
use Setono\DoctrineORMBatcher\Factory\BatcherFactory;
class ProcessProductBatchMessage
{
private $batch;
public function __construct(RangeBatch $batch)
{
$this->batch = $batch;
}
public function getBatch(): RangeBatch
{
return $this->batch;
}
}
$factory = new BatcherFactory(
ObjectCollectionBatcher::class,
IdCollectionBatcher::class,
NaiveIdRangeBatcher::class,
IdRangeBatcher::class
);
$idRangeBatcher = $factory->createIdRangeBatcher($qb);
/** @var RangeBatch[] $batches */
$batches = $idRangeBatcher->getBatches(50);
foreach ($batches as $batch) {
$commandBus->dispatch(new ProcessProductBatchMessage($batch));
}
use Setono\DoctrineORMBatcher\Query\QueryRebuilderInterface;
class ProcessProductBatchMessageHandler
{
public function __invoke(ProcessProductBatchMessage $message)
{
/** @var QueryRebuilderInterface $queryRebuilder */
$q = $queryRebuilder->rebuild($message->getBatch());
$products = $q->getResult();
foreach ($products as $product) {
// process $product
}
}
}
use Doctrine\ORM\EntityManagerInterface;
use Setono\DoctrineORMBatcher\Factory\BatcherFactory;
use Setono\DoctrineORMBatcher\Batch\CollectionBatch;
use Setono\DoctrineORMBatcher\Batcher\Collection\ObjectCollectionBatcher;
use Setono\DoctrineORMBatcher\Batcher\Collection\IdCollectionBatcher;
use Setono\DoctrineORMBatcher\Batcher\Range\NaiveIdRangeBatcher;
use Setono\DoctrineORMBatcher\Batcher\Range\IdRangeBatcher;
class ProcessEnabledProductBatchMessage
{
/** @var CollectionBatch */
private $batch;
public function __construct(CollectionBatch $batch)
{
$this->batch = $batch;
}
public function getBatch(): CollectionBatch
{
return $this->batch;
}
}
/** @var EntityManagerInterface $em */
$qb = $em->createQueryBuilder();
$qb->select('o')
->from(Product::class, 'o')
->where('o.enabled = 1')
;
$factory = new BatcherFactory(
ObjectCollectionBatcher::class,
IdCollectionBatcher::class,
NaiveIdRangeBatcher::class,
IdRangeBatcher::class
);
$idCollectionBatcher = $factory->createIdCollectionBatcher($qb);
/** @var CollectionBatch[] $batches */
$batches = $idCollectionBatcher->getBatches(50);
foreach ($batches as $batch) {
$commandBus->dispatch(new ProcessEnabledProductBatchMessage($batch));
}
use Setono\DoctrineORMBatcher\Query\QueryRebuilderInterface;
class ProcessProductBatchMessageHandler
{
public function __invoke(ProcessEnabledProductBatchMessage $message)
{
/** @var QueryRebuilderInterface $queryRebuilder */
$q = $queryRebuilder->rebuild($message->getBatch());
$products = $q->getResult();
foreach ($products as $product) {
// process $product
}
}
}
use Doctrine\ORM\EntityManagerInterface;
use Setono\DoctrineORMBatcher\Factory\BatcherFactory;
use Setono\DoctrineORMBatcher\Batch\CollectionBatch;
use Setono\DoctrineORMBatcher\Batcher\Collection\ObjectCollectionBatcher;
use Setono\DoctrineORMBatcher\Batcher\Collection\IdCollectionBatcher;
use Setono\DoctrineORMBatcher\Batcher\Range\NaiveIdRangeBatcher;
use Setono\DoctrineORMBatcher\Batcher\Range\IdRangeBatcher;
/** @var EntityManagerInterface $em */
$qb = $em->createQueryBuilder();
$qb->select('o')
->from(Product::class, 'o')
->where('o.enabled = 1')
;
$factory = new BatcherFactory(
ObjectCollectionBatcher::class,
IdCollectionBatcher::class,
NaiveIdRangeBatcher::class,
IdRangeBatcher::class
);
$collectionBatcher = $factory->createObjectCollectionBatcher($qb);
/** @var CollectionBatch[] $batches */
$batches = $collectionBatcher->getBatches(50);
foreach ($batches as $batch) {
/** @var Product $product */
foreach ($batch->getCollection() as $product) {
// process $product
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.