Задать вопрос

Как описывать сущности для другой базы?

Всем привет, если в кратце то мне нужно создавать динамические подключения в бд, само подключение получилось сделать, а вот как быть с сущностями и репозиториями пока не очень понимаю.

Динамическое подключение к бд создаю
вот так(код упрощен)
$params['user'] = 'qwerty';
$params['host'] = 'localhost';
$params['port'] = 3306;
$params['dbname'] = 'test';
$params['password'] = 'test';
$params['url'] = 'mysql://qwerty:test@localhost:3306/test';

$connection = EntityManager::create(
    $params,
    $this->em->getConfiguration(),
    $this->em->getEventManager()
);

$this->em это дефолтное подключение


потом я создаю сущность в
src/Entity/Test/MyTable

и делаю выборку
$connection->getRepository(MyTable::class)->findAll();

и вроде бы работает все классно, но я вспоминаю что мне нужен репозиторий для этой сущности, я добавляю

/**
* @ORM\Entity(repositoryClass="App\Repository\Test\MyTableRepository")
* @ORM\Table(name="my_table")
*/

и сразу же ловлю ошибку что такой таблицы не существует в этой базе данных, но в ошибке видно что он ищет таблицу в дефолтной базе данных, как это исправить? может в создании нового подключения нужно еще что то добавить? или новое подключение создавать вообще как то по другому?
  • Вопрос задан
  • 112 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 1
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
У Symfony есть документация на эту тему: https://symfony.com/doc/current/doctrine/multiple_...

А пример из реальной жизни можете посмотреть, например, у меня в этом мини-проекте. Там PostgreSQL и SQLite одновременно работают.
Внимание стоит обращать на config/packages/doctrine.yaml. Это, само собой, для заранее известных соединений.
Ну и для сущностей из каждой базы использовать свой EntityManager. Это в любом случае - не зависимо от того определены заранее или в рантайме подключения.
и сразу же ловлю ошибку что такой таблицы не существует в этой базе данных

Скорее всего, не тот EntityManager используете либо не с тем соединением его создаёте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы