Как установить поле сущности, которое не существует в таблице, но существует в необработанном SQL как псевдоним?

Допустим, у нас есть такой запрос:

SELECT *, (CUSTOM_EXPRESSION) as virtualfield FROM users

Сам объект пользователя имеет «виртуальное поле», но аннотации сопоставления нет, поскольку в таблице нет этого поля.

Предполагая, что он выполняется как необработанный SQL, как нам заполнить сущность полем выше?


person Keyne Viana    schedule 15.03.2012    source источник


Ответы (2)


Я нашел ответ. Для этого вам нужно использовать скалярное значение. Например:

$rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->getEntityManager());
$rsm->addRootEntityFromClassMetadata('Category', 'c');
$rsm->addScalarResult('depth', 'depth');
// [ ... ]
$results = $q->execute();
// Output will be a two-dimensional array 
// array(0 => array(0 => CategoryObject, 'depth' => 'scalar-value', // ... ), // ...)

Затем вы можете пройтись по нему и установить свойство объекта, если хотите.

person Keyne Viana    schedule 23.03.2012

Я не совсем уверен, что понимаю, о чем вы спрашиваете. Я предполагаю, что вы хотите знать, как обновить users.virtualfield с помощью (CUSTOM_EXPRESSION)? Этот синтаксис будет:

update users set virtualfield = (CUSTOM_EXPRESSION)

Если вы хотите обновить все строки.

Если я не по адресу, не могли бы вы уточнить свой вопрос?

person Dave Collins    schedule 16.03.2012
comment
Конечно я могу. На самом деле я имею в виду ORM Doctrine, SQL — это просто пример поля, которое существует только в контексте запроса. В Doctrine, AFAIK, вы можете заполнять только объекты, которые сопоставляются с полями в таблице, но не поля, созданные в операторе SELECT в качестве псевдонима. Я думаю, вы не видели тег доктрины. Верно? Ваш ответ касается обновлений SQL =) Мой вопрос касается Doctrine. - person Keyne Viana; 16.03.2012