Doctrine继承:获取结果数组中的子类

时间:2015-04-14 11:14:18

标签: symfony doctrine-orm

我正在使用Doctrine2和Symfony2。 我有一个抽象的实体Vehicle,它包含子实体CarBoatAircraft

我使用以下请求:

    $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>

1 个答案:

答案 0 :(得分:1)

我相信这是不可能的,至少不是开箱即用。

然而,GitHub上的 jasonhofer 写了一个TYPE()函数,它正是这样做的。看看:

<强> jasonhofer / doctrine-dql-type-function.php

使用此功能可以执行以下操作:

$qb->select('v.id', 'v.name', 'v.color', 'TYPE(v)');

Haven未对此代码进行测试,但似乎有效。

希望这有帮助。