如何在Entity中使用entityManager?

Ant*_*oir 4 entity entitymanager symfony doctrine-orm

我在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

小智 10

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

Symfony Doc

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

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

对我感到羞耻:(