Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony EntityRepository返回实例的";代理\“CG”u“MyModelName”;_Symfony_Doctrine - Fatal编程技术网

Symfony EntityRepository返回实例的";代理\“CG”u“MyModelName”;

Symfony EntityRepository返回实例的";代理\“CG”u“MyModelName”;,symfony,doctrine,Symfony,Doctrine,质疑 返回proxy\\uu\CG\uuu\AppBundle\Entity\User的对象实例,而不是AppBundle\Entity\User。原因是什么?原则是从自动生成的类中为您提供一个代理对象,该类扩展了您的实体并实现了\原则\ORM\proxy\proxy。您可以在app/cache/dev/doctor/orm/Proxies/中查看这些自动生成类的代码 代理对象允许Doctrine提供的一组行为,否则您必须显式地编码到实体中,包括对延迟加载属性的支持。例如,如果对象具有对另一个实

质疑


返回
proxy\\uu\CG\uuu\AppBundle\Entity\User
的对象实例,而不是
AppBundle\Entity\User
。原因是什么?

原则是从自动生成的类中为您提供一个代理对象,该类扩展了您的实体并实现了
\原则\ORM\proxy\proxy
。您可以在
app/cache/dev/doctor/orm/Proxies/
中查看这些自动生成类的代码

代理对象允许Doctrine提供的一组行为,否则您必须显式地编码到实体中,包括对延迟加载属性的支持。例如,如果对象具有对另一个实体的引用(例如从
OneToOne
/
OneToMany
/
ManyToOne
/
/
manytomone
关联),则在检索
用户
记录时不一定要始终加载这些引用,因为它们可能并非始终相关。延迟加载允许稍后按需引入该数据


为了执行延迟加载,实体需要访问条令,以便它可以要求条令检索相关数据。这是通过提供给代理对象的
\uuuu初始值设定项\uuu
属性完成的。其余的则由条令处理,代码不需要知道细节。

有时我们需要分别确定实体的真实类名

条令使用静态方法,放置在助手类中:“条令\Common\Util\ClassUtils”,用于生成代理类的名称。 以下是描述:

如果您想获得真实的类名,只需使用:

$entityClassName=ClassUtils::getClass($entityObject)

我发现这对于记录实体数据更改非常有用(原始实体可以通过
id
类名
确定)


希望它能有所帮助。

为什么不直接使用
$em->getRepository('AppBundle:User')->find($id)
;请填写你的答案,并告诉我怎么做!奇怪的是,有时候(比如在验证用户和调用用户提供者时),它会返回一个真实的实体。但稍后调用时,它将返回一个代理。请注意,此ClassUtils已弃用。仍然可以复制
ClassUtils::getRealClass($class)
$em->getRepository($this->getRepositoryName('AppBundle:User'))->find($id);