我正在使用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
上的少数属性。 / p>
答案 0 :(得分:1)
我相信这是不可能的,至少不是开箱即用。
然而,GitHub上的 jasonhofer 写了一个TYPE()
函数,它正是这样做的。看看:
<强> jasonhofer / doctrine-dql-type-function.php 强>
使用此功能可以执行以下操作:
$qb->select('v.id', 'v.name', 'v.color', 'TYPE(v)');
Haven未对此代码进行测试,但似乎有效。
希望这有帮助。