Доктрина / Symfony: Как управлять сущностями в базе данных 2? - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть 2 базы данных (default и test).База данных default затрагивается для производственной среды и test для среды разработки.Когда обе базы данных синхронизированы, содержимое должно быть одинаковым.

Итак, для управления этим запросом я следовал этому документу: https://symfony.com/doc/current/doctrine/multiple_entity_managers.html.

Но когда я запускаю эту команду php bin/console doctrine:schema:update --dump-sql --em=test,У меня No Metadata Classes to process.

С той же командой для em по умолчанию у меня нет проблем.

Итак, как я могу определить сущности для обеих баз данных?

Спасибо

РЕДАКТИРОВАТЬ:
Дополнительные сведения о приложении: База данных test предназначена для среды разработки, и ее структура может отличаться от базы данных default.test дБ будет использоваться для функционального тестирования и проверки новых функций.После завершения процесса проверки структуры test db и данные будут объединены в default db.Это стратегия разделения среды производства и разработки.

РЕДАКТИРОВАТЬ 2:
Моя конфигурация:

doctrine:
    dbal:
        default_connection: '%default_database_connection%'
        connections:
            default:
                driver: pdo_mysql
                host: '%database_default_host%'
                port: '%database_default_port%'
                dbname: '%database_default_name%'
                user: '%database_default_user%'
                password: '%database_default_password%'
                charset: UTF8
            test:
                driver: pdo_mysql
                host: '%database_test_host%'
                port: '%database_test_port%'
                dbname: '%database_test_name%'
                user: '%database_test_user%'
                password: '%database_test_password%'
                charset: UTF8

    orm:
        auto_generate_proxy_classes: '%kernel.debug%'
        default_entity_manager: '%default_entity_manager%'
        entity_managers:
            default:
                connection: default
                naming_strategy: doctrine.orm.naming_strategy.underscore
                auto_mapping: true
            test:
                connection: test
                naming_strategy: doctrine.orm.naming_strategy.underscore

1 Ответ

0 голосов
/ 07 декабря 2018

Итак, после многих испытаний и исследований я нашел решение, но с ограничениями.

  1. Я выполнил настройку следующим образом:

    default:
        connection: default
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
        mappings:
            Bundle1: ~
            Bundle2: ~
    test:
        connection: test
        naming_strategy: doctrine.orm.naming_strategy.underscore
        mappings:
            Bundle1: ~
            Bundle2: ~
    
  2. Команда php bin/console doctrine:schema:update --dump-sql --em=test не работает (у меня ошибка There is no column with name 'email' on table 'users_account'.).Я не потратил время на изучение этой проблемы, и я скопировал всю структуру default base на test base с помощью phpMyAdmin.

  3. Я могу использовать оба соединения в одном контроллере, напримерэто:

    $emDefault = $this->getDoctrine()->getManager("default");
    $emTest = $this->getDoctrine()->getManager("test");
    
    $entity1 = $emDefault->find('Bundle1', 1);
    $entity2 = clone $entity1;
    
    $emTest->persist($entity2);
    $emTest->flush();
    
...