我在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?
答案 0 :(得分:10)
实际上实体不应该知道EM。如果我需要在我的实体中使用高级逻辑,我会使用事件监听器。当你注册像服务这样的监听器时,你可以在那里传递args,比如EM或Container,并将它们放在Listener类中。
但我知道在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');