我正在使用新的Entity Listeners,它们对触发它们的实体非常有用。但是,在Listener中我想访问其他实体的数据,实质上是要发出一些数据库请求。
要执行此操作,我使用的是setter injection
<?php
// Project/DefaultBundle/EventListener/SomeIndexer.php
namespace Project\DefaultBundle\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Project\DefaultBundle\Entity\Document;
use Doctrine\ORM\EntityManager;
class SomeIndexer
{
protected $em;
public function setEntityManager(EntityManager $em)
{
$this->em = $em;
}
public function prePersist(Document $doc, LifecycleEventArgs $args)
{
// this is my Document entity which works fine
$entity = $args->getEntity();
$entityManager = $args->getEntityManager();
if ( $entity instanceof Document )
{
// em doesn't seem to be an object
$this->em->getRepository('ProjectDefaultBundle:SomeOtherEntity') ...
}
}
}
并在我的服务配置
中// Project/DefaultBundle/Resources/config/services.yml
services:
timeline.eventlistener.tripindexer:
class: Project\DefaultBundle\EventListener\SomeIndexer
calls:
- [setEntityManager, ["@doctrine.orm.entity_manager"]]
答案 0 :(得分:0)
我有一个错误的假设,即$entityManager
仅适用于文档实体。事实上,您不需要注入任何东西,只需使用:
$repository = $entityManager->getRepository('ProjectDefaultBundle:SomeOtherEntity')...
通过How to get foreign repository inside my repository in Doctrine2/Symfony2?