我在运行具有多个嵌套联接的查询时遇到问题。我发现学说有一个问题,如果你运行一个有两个以上连接的查询,它很快就会变得非常昂贵。
我在这里找到了一篇文章:https ://ocramius.github.io/blog/doctrine-orm-optimization-hydration/描述了通过多种水合技术的解决方案,但是当我尝试运行查询时遇到了问题。我似乎无法获得部分权利,因此我的第二个查询正在使用第一个查询中预先存在的水合数据。
基本上我需要能够从水合数据 ca.member (这是一个数组)中加入结果
这是我的查询:
//first query to grab and hydrate data
$qb = $this->createQueryBuilder('ca');
$case_alterations = $qb->select('ca, cg, cma')
->innerJoin('ca.gene', 'cg')
->leftJoin('ca.mask', 'm')
->leftJoin('ca.member', 'cma')
->where('ca.case_id = :case_id')
->andWhere('m.id IS NULL')
->setParameter('case_id', $case_id)
->getQuery()
->getResult()
;
//second query should grab the already hydrated data in memory and perform the join
$query = $this->createQueryBuilder('ca')
->select('partial ca.{member}, cr')
->leftJoin('ca.result', 'cr')
->getQuery()
->getResult()
;
这是我一直遇到的错误,因为它来自第一个查询而不是子集成员的引用案例:
\Entity\Case has no association named result