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



我正在使用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上的几个属性)。

我相信

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

然而,GitHub上的jasonhofer编写了一个TYPE()函数来做到这一点。看一看:

Jasonhofer/doctrine-dql-type-function.php

使用此函数,可以执行如下操作:

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

尚未测试此代码,但它似乎有效。

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新