规则物体在我的Symfony2控制器之间的代理对象,我有两个疑问:
就像这个例子:Doctrine2 - 中的getResult
$object = $this->getDoctrine()->getManager()
->createQuery('SELECT PARTIAL o.{id,name,field1}
FROM SomeBundle:SomeEntity o
WHERE o.id = :objectId')
->setParameter('objectId', $objectId)
->getResult();
$objects = $this->getDoctrine()->getManager()
->createQuery('SELECT PARTIAL o.{id,name,field1, field2}
FROM SomeBundle:SomeEntity o ')
->getResult();
,我收到收集$objects
影响是SomeBundle:SomeEntity
对象的集合除我收到的变量为$object
我收到代理对象。
如果我输出$objects
集合,并且对于我想打印包含字段name,field1,field2的输出的每个元素,我会为此对象的field2接收null。事实上,如果我将这个$object
与其他控制器一起启动,那么field2在对该对象的每个引用中也是空的。
例如,如果我想以显示每个对象:
name field1 field2
我获得以下数组$objects
:
nameExample field1Example field2Example
nameExample field1Example field2Example
nameExample field1Example
nameExample field1Example field2Example
nameExample field1Example field2Example
其中第三排是$object
。
如果我在第一个查询得到FIELD2它也是在第二之一的getResult可见。但是,这让我控制了在整个请求中为任何实体对象接收的所有字段。
- 我可以犯什么错?
- 我怎样才能避免这种效果?我仍然想使用不与多维数组对象的对象(至于
HYDRATE_ARRAY
) - 有没有一种方法可以强制原则总是使实体对象不与代理对象结合?
在此先感谢您。
谢谢你的答案。我之前考虑过类似的解决方案,但是当您查询具有一次到多次关联的实体时,在一个查询示例中也会出现此问题,这种关联会对其他实体进行两次。在这种情况下,你不能分离对象,也不能清除em,因为它在同一个查询中。你怎么看待这件事? –
你是什么意思,“关联两次”?你是否有实体A与实体B有两种不同的关联(例如,具有'created_by'和'updated_by'字段的'News'实体都指向'User'实体)?你用某种方法加载“PARTIAL”? –
我的意思是这里描述的情况:https://github.com/doctrine/doctrine2/issues/5731,所以实际上我还不够精确,因为这个问题被这种变体的关联所注意到:'A-> B - > A'。 –