Сконфигурируйте второй Entity Manager для Symfony5 Bundle Entities - PullRequest
0 голосов
/ 07 апреля 2020

Мне бы хотелось иметь 2 менеджера сущностей, один для базы данных SQLite для сущностей, определенных в комплекте, а другой для основного приложения. Таким образом, я могу загрузить данные, которые никогда не меняются, в одну базу данных, а также загрузить данные, тесты и т. Д. c. в базу данных приложения. Я ожидаю, что следующее выгрузит sql для сущностей пакета, но это не так:

bin/console doctrine:schema:update --dump-sql  --em=geonames
[OK] No Metadata Classes to process.                                                                                   

Аналогично, я бы ожидал, что easyadmin позволит мне определять классы для сущностей пакета, но это также происходит сбой.

# easy_admin.yaml
    entities:
        Administrative:
            class: Bordeux\Bundle\GeoNameBundle\Entity\Administrative

Настроенный класс "Bordeux \ Bundle \ GeoNameBundle \ Entity \ Administrative" для пути "easy_admin.entities.Administrative" не является сопоставленной сущностью.

Я ожидаю, что это как-то связано с пространствами имен, или, может быть, параметром is_bundle. Я потратил на это несколько часов, следуя учебным пособиям и документации по нескольким менеджерам сущностей, но не могу найти ничего, что показывало бы, как обращаться с сущностями из стороннего пакета.

# doctrine.yaml

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                url: '%env(resolve:DATABASE_URL)%'
            geonames:
                url: '%env(DATABASE_GEONAMES_URL)%'

    orm:

        default_entity_manager: default
        entity_managers:
            default:
                connection: default
                naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
                auto_mapping: true
                mappings:
                    App:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: App

            geonames:
                connection: geonames
                mappings:
                    BordeuxGeoNameBundle:
                        is_bundle: true
                        type: annotation
                        dir: 'Entity'
                        prefix: 'Geonames\Entity'
                        alias: Geonames

1 Ответ

1 голос
/ 07 апреля 2020

Я не настроил несколько менеджеров сущностей для самой последней и лучшей версии Symfony, поэтому я настроил небольшой тестовый пример и придумал это для конфигурации:

    orm:
        default_entity_manager: default
        auto_generate_proxy_classes: true
        entity_managers:
            default:
                connection: default
                naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
                mappings:
                    App:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: App
            geonames:
                connection: geonames
                naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
                mappings:
                    BordeuxGeoNameBundle:
                        is_bundle: true
                        type: annotation
                        dir: 'Entity'
                        prefix: 'Bordeux\Bundle\GeoNameBundle\Entity'
                        alias: GeoNames

Я протестировал его, используя:

bin/console doctrine:mapping:info --em=geonames

И подтвердил, что сущности картируются. Я не установил EasyAdmin и не протестировал его, но не вижу причин, по которым он не будет работать.

Основным отличием было использование пространства имен сущности для атрибута префикса.

И только для По своему будущему отзыву я отправил тестовый проект на github .

...