Query
$em->getRepository($this->getRepositoryName('AppBundle:User'))->find($id);
返回对象实例Proxies\__CG__\AppBundle\Entity\User
代替AppBundle\Entity\User
。这是什么原因呢?
Doctrine 为您提供一个来自自动生成的类的代理对象,该类扩展您的实体并实现\Doctrine\ORM\Proxy\Proxy
。您可以在以下位置查看这些自动生成的类的代码app/cache/dev/doctrine/orm/Proxies/
.
代理对象允许 Doctrine 提供的一组行为,否则您必须显式编码到实体中,包括对属性延迟加载的支持。例如,如果您的对象具有对另一个实体的引用(例如来自OneToOne
/OneToMany
/ManyToOne
/ManyToMany
关联),您不一定希望在检索时始终加载这些引用User
记录下来,因为它们可能并不总是相关的。延迟加载允许稍后按需引入数据。
为了执行延迟加载,实体需要访问 Doctrine,以便它可以要求 Doctrine 检索相关数据。这是通过一个__initializer__
提供给代理对象的属性。剩下的事情就会发生,由 Doctrine 处理,而您的代码不需要知道细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)