Как я могу получить доступ к другому менеджеру сущности внутри сущности? - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь сохранить изменения в таблице Changlog внутри сущности в Symfony. Таблица Changlog имеет собственную базу данных по причинам производительности.

Как я могу получить доступ к другому EntityManager в рамках методов обратного вызова жизненного цикла?

Я пытался получить доступ к EntityManager через PreUpdateEventArgs, но доступен только EntityManager текущего Entity. Внедрение ContainerInterface также не сработало.

К сожалению, документация мне не помогла, и я не нашел сопоставимых примеров в Google, поэтому я благодарен за любую помощь.

Моя конфигурация:

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                # configure these for your database server
                driver: 'pdo_mysql'
                server_version: '4.2.13.3'
                charset: utf8mb4
                default_table_options:
                    charset: utf8mb4
                    collate: utf8mb4_unicode_ci

                url: '%env(resolve:DATABASE_URL)%'
            log:
                driver: 'pdo_mysql'
                server_version: '4.2.13.3'
                charset: utf8mb4
                default_table_options:
                    charset: utf8mb4
                    collate: utf8mb4_unicode_ci

                url: '%env(resolve:DATABASE_LOG_URL)%'
    orm:
        auto_generate_proxy_classes: true
        default_entity_manager: default
        entity_managers:
            default:
                connection: default
                naming_strategy: doctrine.orm.naming_strategy.underscore
                #auto_mapping: true
                mappings:
                    App:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: App
                filters:
                    is_deleted: App\Doctrine\IsDeletedFilter
            log:
                connection: log
                naming_strategy: doctrine.orm.naming_strategy.underscore
                mappings:
                    Log:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Log/Entity'
                        prefix: 'App\Log\Entity'
                        alias: Log

Моя сущность:

...

namespace App\Entity;
...
use \App\Log\Entity\Changelog;

...

/**
     * @ORM\PreUpdate
     */
    public function setUpdatedAtValue(\Doctrine\ORM\Event\PreUpdateEventArgs $eventArgs)
    {
        $this->udate = new \DateTime();
        $changeLog = new Changelog;
        $changeLog->setCrdate(new \DateTime());
        $changeLog->setChangeid($this->id);
        $changeLog->setChangedata($eventArgs->getentityChangeSet());

        $entityManager = $eventArgs->getEntityManager('log'); // does not work
        $entityManager->persist($changeLog);
        $entityManager->flush();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...