比方說,我們有這樣一個查詢:本身所具有的「virtualfield」,但映射註解沒有如何設置表中不存在但在原始SQL中存在的實體字段作爲別名?
SELECT *, (CUSTOM_EXPRESSION) as virtualfield FROM users
用戶的實體,因爲表中沒有此字段。
假設它是作爲原始SQL執行的,我們如何使用上面的字段填充實體?
比方說,我們有這樣一個查詢:本身所具有的「virtualfield」,但映射註解沒有如何設置表中不存在但在原始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)
如果您想更新所有行。
如果我不符合標準,請您澄清一下您的問題?
當然可以。其實我指的是Doctrine ORM,SQL只是一個只存在於查詢上下文中的字段的例子。在Doctrine上,AFAIK只能填充映射到表上字段的對象,而不能填充在SELECT語句內創建的字段作爲別名。我認爲你沒有看到教條標籤。對?你的答案是關於SQL更新=)我的問題是關於教義。 – 2012-03-16 16:53:10