for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Zenstruck\Foundry;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\Persistence\ObjectManager;
use Doctrine\Persistence\ObjectRepository;
class ChainManagerRegistry
{
/** @var array<ManagerRegistry> */
private $managerRegistries;
/** @param array<ManagerRegistry> $managerRegistries */
public function __construct(array $managerRegistries)
if (count($managerRegistries) === 0) {
throw new \InvalidArgumentException('no manager registry provided');
}
$this->managerRegistries = $managerRegistries;
public function getRepository($class): ObjectRepository
foreach ($this->managerRegistries as $managerRegistry) {
if ($repository = $managerRegistry->getRepository($class)) {
return $repository;
throw new \LogicException("Cannot find repository for class $class");
public function getManagerForClass($class): ?ObjectManager
if ($managerForClass = $managerRegistry->getManagerForClass($class)) {
return $managerForClass;
return null;
/** @return array<ObjectManager> */
public function getManagers(): array
return array_reduce(
$this->managerRegistries,
static function (array $carry, ManagerRegistry $managerRegistry) {
return array_merge($carry, $managerRegistry->getManagers());
},
[]
);