2

假设我们有一个这样的查询:

SELECT *, (CUSTOM_EXPRESSION) as virtualfield FROM users

用户的实体本身具有“虚拟字段”,但映射注释没有,因为表没有此字段。

假设它作为原始 SQL 执行,我们如何使用上面的字段填充实体?

4

2 回答 2

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

然后,您可以遍历它并根据需要设置对象的属性。

于 2012-03-23T02:23:05.567 回答
0

我不完全确定我明白你在问什么。我假设您想知道如何使用 (CUSTOM_EXPRESSION) 更新 users.virtualfield?该语法将是:

update users set virtualfield = (CUSTOM_EXPRESSION)

如果您想更新所有行。

如果我跑题了,你能澄清你的问题吗?

于 2012-03-16T15:55:54.693 回答