2012-03-15 1 views
2

Допустим, что у нас есть запрос, как этот:Как установить поле объекта, которое не существует в таблице, но существует в сыром SQL как псевдоним?

SELECT *, (CUSTOM_EXPRESSION) as virtualfield FROM users

сущность Пользователя, сам имеет «virtualfield», но отображение аннотаций нет, так как таблица не имеет этого поля.

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

ответ

1

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

$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', // ...), // ...) 

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

0

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

update users set virtualfield = (CUSTOM_EXPRESSION) 

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

Если я не знаком, уточните, пожалуйста, ваш вопрос?

+0

Конечно, я могу. Фактически я имею в виду ORM Doctrine, SQL - всего лишь пример поля, которое существует только в контексте запроса. В Doctrine, AFAIK вы можете заполнять только объекты, которые сопоставляются с полями в таблице, но не поля, созданные в инструкции SELECT как псевдоним. Я думаю, вы не видели тег доктрины. Правильно? Ваш ответ о SQL-обновлениях =) Мой вопрос о Doctrine. –

Смежные вопросы