我想知道是否有一种干净的方法可以解决这个小难题......一直在解决它,但终于有时间研究“正确的方法”!
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] 我意识到在 ->select('p.id, p.that, p.this') 中列出列......解决了这个问题,但我不想每次模式都必须维护这么多查询被改变。
是否有一种方便或内置的方法可以从 getArrayResult 中获取平面数组?
谢谢!
| 归档时间: |
|
| 查看次数: |
519 次 |
| 最近记录: |