Я пытаюсь сохранить изменения в таблице 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();
}
}