我正在使用Doctrine2和Symfony2。我有一个抽象的实体Vehicle
它有子实体Car
、Boat
和Aircraft
。
我使用以下请求:
$em = $this->getEntityManager();
$qb = $em->createQueryBuilder();
$qb->select('v.id', 'v.name', 'v.color');
$qb->from('MyBundle:Vehicle','v');
return $qb->getQuery()->getResult();
这给了我一个这样的数组:
array
0 =>
array
'id' => 1
'name' => 'Car#1'
'color' => 'blue'
1 =>
array
'id' => 2
'name' => 'SuperTanker'
'color' => 'yellow'
2 =>
array
'id' => 3
'name' => 'Boeing 747'
'color' => 'white'
我需要在结果数组中添加有关每个元素的类名的信息(它也可以是鉴别器列的内容)。它会给出类似的东西:
array
0 =>
array
'type' => 'Car' // <-- NEW
'id' => 1
'name' => 'Car#1'
'color' => 'blue'
1 =>
array
'type' => 'Boat' // <-- NEW
'id' => 2
'name' => 'SuperTanker'
'color' => 'yellow'
2 =>
array
'type' => 'Aircraft' // <-- NEW
'id' => 3
'name' => 'Boeing 747'
'color' => 'white'
注意:我知道我可以通过获取完整的Vehicle
对象而不是数组($qb->select('v');
),然后测试每个对象以了解它们是否instance of
某些东西;或者我可以使用get_class($vehicle);
但我需要我的请求返回一个数组(我的Vehicle
对象非常大,在这种情况下,我只需要访问许多Vehicle
上的几个属性)。
这是不可能的,至少不是开箱即用的。
然而,GitHub上的jasonhofer编写了一个TYPE()
函数来做到这一点。看一看:
Jasonhofer/doctrine-dql-type-function.php
使用此函数,可以执行如下操作:
$qb->select('v.id', 'v.name', 'v.color', 'TYPE(v)');
尚未测试此代码,但它似乎有效。
希望这有帮助。