Как установить поле сущности, которое не существует в таблице, но существует в необработанном SQL как псевдоним? - PullRequest
2 голосов
/ 16 марта 2012

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

SELECT *, (CUSTOM_EXPRESSION) as virtualfield FROM users

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

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

Ответы [ 2 ]

1 голос
/ 23 марта 2012

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

$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 голосов
/ 16 марта 2012

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

update users set virtualfield = (CUSTOM_EXPRESSION)

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

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

...