小编Joh*_*ann的帖子

Doctrine2在多个级别上连接多个请求

我有4个实体在分层级相关:Company,DepartmentEmployee.Company并且Department与ManyToOne双向关系有关.DepartmentEmployee通过另一个实体与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)

我只得到一个像预期执行的查询.

如何在不触发多次查询的情况下对左连接执行左连接?

join left-join symfony doctrine-orm

3
推荐指数
1
解决办法
4302
查看次数

标签 统计

doctrine-orm ×1

join ×1

left-join ×1

symfony ×1