4

我在实体类中有这个功能,但 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;
    }
}

如何在我的 Entity 中使用 entityManager?

4

2 回答 2

10

实际上 Entity 不应该知道 EM。如果我需要在我的实体中使用高级逻辑,我会使用事件监听器。当您像服务一样注册侦听器时,您可以在那里传递参数,例如 EM 或容器,并将它们放入侦听器类中。

Symfony 文档

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

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

为我感到羞耻:(

于 2013-03-21T19:40:01.343 回答
-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');
于 2015-09-21T09:09:47.200 回答