Symfony 条令继承:获取结果数组中的子类
我正在使用Doctrine2和Symfony2。 我有一个抽象实体Symfony 条令继承:获取结果数组中的子类,symfony,doctrine-orm,Symfony,Doctrine Orm,我正在使用Doctrine2和Symfony2。 我有一个抽象实体Vehicle,它有子实体Car,Boat和飞机 我使用以下请求: $em = $this->getEntityManager(); $qb = $em->createQueryBuilder(); $qb->select('v.id', 'v.name', 'v.color'); $qb->from('MyBundle:Vehicle','v'); return
Vehicle
,它有子实体Car
,Boat
和飞机
我使用以下请求:
$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'
$qb->select('v.id', 'v.name', 'v.color', 'TYPE(v)');
我需要的是在结果数组中添加关于每个元素的类名的信息(也可能是鉴别器列的内容)。
它会给出类似于:
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'
数组
0 =>
排列
'type'=>'Car'//1
“名称”=>“汽车#1”
“颜色”=>“蓝色”
1 =>
排列
'类型'=>'船'//2
“名称”=>“超级油轮”
“颜色”=>“黄色”
2 =>
排列
'类型'=>'飞机'//3
“名称”=>“波音747”
“颜色”=>“白色”
注意:我知道我可以通过获取完整的
车辆
对象而不是数组($qb->select('v');
),然后测试每个对象,以确定它们是否是某物的实例;或者我可以使用get_class($vehicle)代码>但我需要我的请求返回一个数组(我的车辆
对象很大,在这种情况下,我只需要访问许多车辆
上的几个属性)。我认为这是不可能的,至少不是现成的
然而,GitHub上的jasonhofer编写了一个TYPE()
函数,它正好实现了这一点。看一看:
使用此函数,可以执行如下操作:
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'
$qb->select('v.id', 'v.name', 'v.color', 'TYPE(v)');
尚未测试此代码,但它似乎有效
希望这有帮助。部分选择如何?您仍然可以选择少数列并将结果格式化为对象。更多信息-谢谢你的信息,这似乎是我的问题的答案。“似乎”,因为我也没有测试代码。我对我的代码进行了一些重构,然后我更聪明地处理了尽可能多的请求。