В моем контроллере Symfony2 у меня есть два запроса:
как в этом примере:
$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
, для которого я получаю объект Proxy.
Если я вывожу коллекцию $objects
и для каждого элемента я хочу распечатать вывод, который включает поля: имя, поле1, поле2, я получаю null для поля2 для этого объекта. На самом деле, если я получу этот $object
в любом другом контроллере, запущенном вместе с этим, field2 также будет нулевым при каждой ссылке на объект.
Например, если я хочу отображать каждый объект как:
name field1 field2
Я получаю следующий массив для $objects
:
nameExample field1Example field2Example
nameExample field1Example field2Example
nameExample field1Example
nameExample field1Example field2Example
nameExample field1Example field2Example
где третья строка — это $object
.
Если я получаю поле2 в первом запросе, оно также отображается в getResult второго. Но это заставляет меня контролировать все поля, полученные для любого объекта Entity во всем запросе.
- Что я мог сделать не так?
- Как я могу избежать этого эффекта? Я все-таки хочу работать с объектами, а не с многомерными массивами (как для
HYDRATE_ARRAY
) - Есть ли способ заставить доктрину всегда приводиться к объектам сущностей, а не к прокси-объектам?
Заранее спасибо.
News
с полямиcreated_by
иupdated_by
, которые оба указывают на объектUser
)? А вы их как-то грузите сPARTIAL
? 06.01.2017A->B->A
. 06.01.2017$em->refresh($object)
должна решить эту проблему за вас, поскольку она полностью перезагрузит (все переменные указывают на) сущность. 09.01.2017