我有4个实体在分层级相关:Company,Department和Employee.Company并且Department与ManyToOne双向关系有关.Department并Employee通过另一个实体与2个OneToMany双向关系相关,因为我需要关系的其他参数.所以基本上最终的架构是这样的:
Company <-> Department <-> DepartmentEmployee <-> Employee
Run Code Online (Sandbox Code Playgroud)
我正在尝试从当前用户的公司中选择一个部门,并获得该部门的所有员工.我正在使用自定义存储库来使用查询构建器构建我的查询,如下所示:
// DepartmentRepository.php
public function getOneWithEmployees($slug, $company)
{
$qb = $this->createQueryBuilder('d')
->where('d.slug = :slug')
->andWhere('c.slug = :company')
->setParameters(array('slug' => $slug, 'company' => $company))
->leftJoin('d.company', 'c')
->addSelect('c')
->leftJoin('d.departmentEmployee', 'r')
->addSelect('r')
->leftJoin('r.employee', 'e')
->addSelect('e');
return $qb->getQuery()->getOneOrNullResult();
}
Run Code Online (Sandbox Code Playgroud)
关键是要减少查询次数,但是当我执行此查询时,我仍然会对数据库进行32次查询(我在该部门有15名员工).
当我删除该部分
->leftJoin('r.employee', 'e')
->addSelect('e')
Run Code Online (Sandbox Code Playgroud)
我只得到一个像预期执行的查询.
如何在不触发多次查询的情况下对左连接执行左连接?