Почему возникает странная ошибка при создании двух EntityManagers?

Рейтинг: 0Ответов: 1Опубликовано: 21.07.2023

собственно вот настройки doctrine.yaml

doctrine:
    dbal:
        types:
           ...
        default_connection: default
        connections:
            default:
                driver: 'pdo_mysql'
                server_version: '5.7'
                charset: utf8mb4
                logging: false
                default_table_options:
                    charset: utf8mb4
                    collate: utf8mb4_unicode_ci
                options:
                    1002: 'SET sql_mode=(SELECT REPLACE(@@sql_mode, "ONLY_FULL_GROUP_BY", ""))'
                url: '%env(resolve:DATABASE_URL)%'
            push:
                driver: 'pdo_sqlite'
                path: '%env(resolve:DATABASE_URL_PUSH)%'
    orm:
        auto_generate_proxy_classes: true
        default_entity_manager: default
        entity_managers:
            default:
                naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
                connection: default
                mappings:
                    App:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: App
            push:
                naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
                connection: push
                mappings:
                    Push:
                        type: annotation
                        dir: '%kernel.project_dir%/src/Push/Entity'
                        prefix: 'App\Push\Entity'
                        alias: Push
                        is_bundle: false

делаю так

php bin/console doctrine:migrations:diff --allow-empty-diff --no-interaction --em=default

получаю ошибку

The class 'App\Push\Entity\Message' was not found in the chain configured namespaces App\Entity, FOS\UserBundle\Model 

делаю так

php bin/console doctrine:migrations:diff --allow-empty-diff --no-interaction --em=push

получаю

The class 'App\Entity\User' was not found in the chain configured namespaces App\Push\Entity

что я делаю не так и как правильно ?

Ответы

▲ 1

Вот ваша ошибка: The class 'App\Push\Entity\Message' was not found in the chain configured namespaces App\Entity, FOS\UserBundle\Model

Вот ваш namespace, который сконфигурирован для default entity manager: prefix: 'App\Entity'

Т.е. default entity manager ничего не знает про пространство App\Push, а push entity manager ничего не знает про App\Entity, это довольно логично, вы же явно указываете prefix.

В данном случае, если вам нужно обслуживать одни и те же сущности разными entity manager-ами, то укажите один и тот же префикс для push и default (сущности должны лежать по указанному префиксу).


Либо же, можно попробовать использовать mappings конфигурацию у orm:

    orm:
        mappings:
            User:
               is_bundle: false
               type: attribute
               dir: '%kernel.project_dir%/src/Entity'
               prefix: 'App\Entity'
               alias: User
            Message:
               is_bundle: false
               type: attribute
               dir: '%kernel.project_dir%/src/Push/Entity'
               prefix: 'App\Push\Entity'
               alias: Message