假设我们有一个这样的查询:
SELECT *, (CUSTOM_EXPRESSION) as virtualfield FROM users
用户的实体本身具有“虚拟字段”,但映射注释没有,因为表没有此字段。
假设它作为原始 SQL 执行,我们如何使用上面的字段填充实体?
假设我们有一个这样的查询:
SELECT *, (CUSTOM_EXPRESSION) as virtualfield FROM users
用户的实体本身具有“虚拟字段”,但映射注释没有,因为表没有此字段。
假设它作为原始 SQL 执行,我们如何使用上面的字段填充实体?
我找到了答案。为此,您需要使用标量值。例如:
$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', // ... ), // ...)
然后,您可以遍历它并根据需要设置对象的属性。
我不完全确定我明白你在问什么。我假设您想知道如何使用 (CUSTOM_EXPRESSION) 更新 users.virtualfield?该语法将是:
update users set virtualfield = (CUSTOM_EXPRESSION)
如果您想更新所有行。
如果我跑题了,你能澄清你的问题吗?