如何在Entity中使用entityManager?

时间:2012-06-18 08:48:11

标签: symfony doctrine-orm entity entitymanager

我在Entity类中有这个功能,但getDoctrine不喜欢......

public function getObject()
{
    $em = $this->getDoctrine()->getEntityManager();

    switch($this->objectType)
    {
        case 'video':
            return $em->getRepository('fdj2012AdminBundle:Video')->find($this->objectId);
            break;
        case 'default':
            return false;
            break;
    }
}

如何在我的实体中使用entityManager?

2 个答案:

答案 0 :(得分:10)

实际上实体不应该知道EM。如果我需要在我的实体中使用高级逻辑,我会使用事件监听器。当你注册像服务这样的监听器时,你可以在那里传递args,比如EM或Container,并将它们放在Listener类中。

Symfony Doc

但我知道在Entity类中获取EM并不是很好的方法。通过实体方法中的全局变量Kernel。

global $kernel;
if ( 'AppCache' == get_class($kernel) )
{
   $kernel = $kernel->getKernel();
}
$em = $kernel->getContainer()->get( 'doctrine.orm.entity_manager' );

对我感到羞耻:(

答案 1 :(得分:-1)

在services.yml中添加此

access_manager:
  class: AppBundle\Services\EntityManager
  arguments: [ @service_container ]

在经理 -

private $_container;


public function __construct(ContainerInterface $container)
{
    $this->_container = $container;
}

访问经理 -

        $entity2Manager = $this->_container->get('entity2_manager');