我遇到了性能问题,我正在尝试从我的存储库中使用return $qb->getQuery()->getArrayResult();
检索水合物数组来改进它。
性能略好一些,但我再也无法访问我的自定义实体方法......我猜这是一种正常的行为,但有没有办法解决它?
我的控制器操作只是从我的存储库中检索一组对象,这里是代码:
public function findAllForAdmin()
{
$qb = $this
->createQueryBuilder('a')
->leftJoin('a.subcategory', 's')
->addSelect('s')
->leftJoin('s.category', 'c')
->addSelect('c')
->leftJoin('a.user', 'u')
->addSelect('u')
->leftJoin('a.advertpaidoptions', 'apo')
->addSelect('apo')
->leftJoin('a.photos', 'p')
->addSelect('p')
;
return $qb
->getQuery()
->getArrayResult()
;
}
a是广告,我正在检索大约2k广告。那不是IMO ...... 我不知道在哪里看......
答案 0 :(得分:0)
getArrayResult
会将select的结果返回到数组中,因此不再可能拥有实体。
如果您需要获取实体的所有(或某些)信息,您可以遵循策略:
select
构建器部分的一部分fetch=EAGER
醇>
答案 1 :(得分:0)
嗯,我认为我设法改善了我的表现问题,但答案似乎非常明显......
我只需加载我需要的字段,而不是加载整个实体......
public function findAllForAdmin()
{
$qb = $this
->createQueryBuilder('a')
->select(array(
'a.id',
'a.dateCreate',
'a.title',
'a.price',
'a.price_type',
'a.completed',
'a.deleted',
'a.slug',
))
->leftJoin('a.subcategory', 's')
->addSelect('s.slug AS s_slug')
->leftJoin('s.category', 'c')
->addSelect('c.slug AS c_slug')
->leftJoin('a.user', 'u')
->addSelect('u.username')
->leftJoin('a.advertpaidoptions', 'apo')
->addSelect('COUNT(apo.id) AS nb_apo')
->leftJoin('a.photos', 'p')
->addSelect('COUNT(p.id) AS nb_p')
->groupBy('a.id')
;
return $qb
->getQuery()
->getResult()
;
}