Symfony 4.x: Doctrine getManagerForClass () не возвращает правильный Entity Manager - PullRequest
0 голосов
/ 25 апреля 2018

Я ищу возможность получить правильный Entity Manager для данного экземпляра объекта (или просто для имени класса).

Было отмечено, что doctrine ManagerRegistry имеет метод getManagerForClass, который принимает имя класса и должен возвращать правильный соответствующий Entity Manager.

Однако, когда я вызываю его, он всегда возвращает значение по умолчанию.

orm:
    auto_generate_proxy_classes: '%kernel.debug%'
    default_entity_manager: default
    entity_managers:
        default:
            naming_strategy: doctrine.orm.naming_strategy.underscore
            connection: default
            mappings:
                App:
                    is_bundle: false
                    type: annotation
                    dir: '%kernel.project_dir%/src/Entity'
                    prefix: 'App\Entity'
                    alias: App
                gedmo_loggable:
                    is_bundle: false
                    type: annotation
                    dir: '%kernel.project_dir%/vendor/gedmo/doctrine-extensions/lib/Gedmo/Loggable/Entity'
                    prefix: Gedmo\Loggable\Entity
                    alias: GedmoLoggable # this one is optional and will default to the name set for the mapping
        lobbytrack:
            naming_strategy: doctrine.orm.naming_strategy.underscore
            connection: lobbytrack
            mappings:
                Lobbytrack:
                    is_bundle: false
                    type: annotation
                    dir: '%kernel.project_dir%/src/Entity/Lobbytrack'
                    prefix: 'App\Entity\Lobbytrack'
                    alias: Lobbytrack

Я тестирую сущность в базе данных obbytrack , посетитель .

$entityClass = 'App\Entity\Lobbytrack\Visitor';
$this->entityManager = $this->managerRegistry->getManagerForClass($entityClass);

Если я проверяю возвращенный entityManager, я вижу, что он получает диспетчер сущностей по умолчанию , когда он должен возвращать obbytrack .

Конфигурация объекта посетителя помещает его в соответствующее пространство имен, и, насколько я могу судить, именно так он определяет, какой менеджер соответствует какому объекту.

namespace App\Entity\Lobbytrack;

use Doctrine\ORM\Mapping as ORM;

/**
 * Visitor
 *
 * @ORM\Table(name="visitor")
 * @ORM\Entity(repositoryClass="App\Repository\Lobbytrack\VisitorRepository")
 * @ORM\HasLifecycleCallbacks
 */
 class Visitor
 {

Я думаю, что-то есть в моемКонфигурация, которая нарушает это, но я не вижу, что.

1 Ответ

0 голосов
/ 30 октября 2018

Размещение диспетчера сущностей «по умолчанию» последним в doctrine.yaml заставило это работать как положено.

orm:
    auto_generate_proxy_classes: '%kernel.debug%'
    default_entity_manager: default
    entity_managers:
        lobbytrack:
            naming_strategy: doctrine.orm.naming_strategy.underscore
            connection: lobbytrack
            mappings:
                Lobbytrack:
                    is_bundle: false
                    type: annotation
                    dir: '%kernel.project_dir%/src/Entity/Lobbytrack'
                    prefix: 'App\Entity\Lobbytrack'
                    alias: Lobbytrack
        vcenter:
            naming_strategy: doctrine.orm.naming_strategy.underscore
            connection: vcenter
            mappings:
                Vcenter:
                    is_bundle: false
                    type: annotation
                    dir: '%kernel.project_dir%/src/Entity/Vcenter'
                    prefix: 'App\Entity\Vcenter'
                    alias: Vcenter
        default:
            naming_strategy: doctrine.orm.naming_strategy.underscore
            connection: default
            mappings:
                App:
                    is_bundle: false
                    type: annotation
                    dir: '%kernel.project_dir%/src/Entity'
                    prefix: 'App\Entity'
                    alias: App
                gedmo_loggable:
                    is_bundle: false
                    type: annotation
                    dir: '%kernel.project_dir%/vendor/gedmo/doctrine-extensions/lib/Gedmo/Loggable/Entity'
                    prefix: Gedmo\Loggable\Entity
                    alias: GedmoLoggable # this one is optional and will default to the name set for the mapping
...