Efficient Doctrine entity iteration
There are a ton of ways described online to iterate entities efficiently in Doctrine 2.* (up to at least 2.17), but the most efficient one is definitely to lookup entities using your own for loop
.
<?php
...
$maxLimit = 100_000;
$limit = 200;
$offset = 0;
for ($offset = 0; $offset < $maxLimit; $offset += $limit) {
$myEntities = $myEntityRepository->findBy(['myField' => true], ['fieldToOrderBy' => 'ASC'], $limit, $offset);
if (!$myEntities) {
break;
}
/** @var MyEntity $myEntity */
foreach ($myEntities as $myEntity) {
// ... do something
}
// Optionally call `$entityManager->clear();` here.
// $entityManager->clear();
}
...