2

Lets say that we have a query like this one:

SELECT *, (CUSTOM_EXPRESSION) as virtualfield FROM users

The user's entity itself has the "virtualfield" but the mapping annotations no, since the table doesn't have this field.

Assuming that it is executed as a raw SQL, how do we populate the entity with the field above?

Keyne Viana
  • 6,194
  • 2
  • 24
  • 55

2 Answers2

1

I've found the answer. To do so, you need to use a scalar value. For instance:

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

Then, you can loop through it and set the property on the object if you want.

Keyne Viana
  • 6,194
  • 2
  • 24
  • 55
0

I'm not entirely sure I understand what you are asking. I assume you want to know how to update users.virtualfield with the (CUSTOM_EXPRESSION)? That syntax would be:

update users set virtualfield = (CUSTOM_EXPRESSION)

If you wanted to update all rows.

If I'm off the mark can you please clarify your question?

Dave Collins
  • 1,077
  • 1
  • 15
  • 23
  • Sure I can. Actually I'm referring to the Doctrine ORM, the SQL is just an example of a field that only exists on the context of the query. On Doctrine, AFAIK you can only populate objects that maps to fields on the table, but not fields that are created within a SELECT statement as an alias. I think you have not seen the doctrine tag. Right? Your answer is about SQL updates =) My question is about Doctrine. – Keyne Viana Mar 16 '12 at 16:53