使用 addSelect 从 Doctrine 2 queryBuilder 中获取“平面”数组

Sae*_*ven 6 php doctrine-orm

我想知道是否有一种干净的方法可以解决这个小难题......一直在解决它,但终于有时间研究“正确的方法”!

Doctrine 查询生成器片段

public function getSprockets(array $id_list, $include_stats = false )
{
    $qb = $this->getEntityManager()->createQueryBuilder()
        ->select('p')
        ->from( 'Entity\Foo', 'p' )
        ->where('p.id IN ( :pids )')
        ->setParameter('pids', $id_list);

    if( $include_stats )
        $qb->addSelect( '(SELECT SUM( a.value ) FROM Entity\Stats a WHERE a.foo_id = p.id AND a.type="bar" ) AS bar_count' );

    $res = $qb->getQuery()->getArrayResult();
    return $res;
}   
Run Code Online (Sandbox Code Playgroud)

照原样,无论是否调用addSelect,此代码段的行为都非常不同。如果它不存在,我会按预期得到一个不错的平面阵列。但是,如果使用 addSelect($include_stats为 true),则 $res 中的一行完全不同,包含:

  • 实体的部分 $row[0]
  • 以及 $row 底部的 addSelect 结果,例如 $row['bar_count']

我意识到在 ->select('p.id, p.that, p.this') 中列出列......解决了这个问题,但我不想每次模式都必须维护这么多查询被改变。

是否有一种方便或内置的方法可以从 getArrayResult 中获取平面数组?

谢谢!