У меня есть вспомогательный сервис, который на лету связывает меня с базой данных.
$databaseName = 'db_x';
$em = $this->entityManagerProvider->get($databaseName);
Я могу использовать этот менеджер сущностей следующим образом:
$car = new Car();
$car->setName('Audi');
$em->persist($car);
$em->flush();
Он работает хорошо!Объект был вставлен в мой db_x
Но если я запустил метод репозитория на этом менеджере сущностей:
$em->getRepository('App\Entity\Car')->findById(1);
Затем менеджер сущностей попытается запустить мою базу данных по умолчанию, а не db_x.Как это возможно?
Мой сервис для переключения базы данных:
namespace App\Utils\Database;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
class EntityManagerProvider
{
/**
* @var EntityManagerInterface
*/
protected $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @param $databaseName
* @return EntityManagerInterface
* @throws \Doctrine\ORM\ORMException
*/
public function get($databaseName): EntityManagerInterface
{
return EntityManager::create(
$this->configureParams($databaseName),
$this->entityManager->getConfiguration(),
$this->entityManager->getEventManager()
);
}
/**
* @param string $databaseName
* @return array
*/
private function configureParams(string $databaseName): array
{
$params = $this->entityManager->getConnection()->getParams();
unset(
$params['dbname'],
$params['path'],
$params['url'],
$params["wrapperClass"]
);
$params['dbname'] = $databaseName;
return $params;
}
}