Symfony 内连接符号学说

Symfony 内连接符号学说,symfony,doctrine,Symfony,Doctrine,目前,我有一个DQL查询,我想用QueryBuilder重写它,但因为我使用了几个实体,它很复杂,我看过一些示例,但我不理解多个实体与我想重写的代码之间的关系如下: Public function getDepartamentoEmpresaEmpleado($numdoc){ // Muestra todos los departamentos de la empresa a la cual pertenece el empleado logeado $em = $this-&

目前,我有一个DQL查询,我想用QueryBuilder重写它,但因为我使用了几个实体,它很复杂,我看过一些示例,但我不理解多个实体与我想重写的代码之间的关系如下:

Public function getDepartamentoEmpresaEmpleado($numdoc){
    // Muestra todos los departamentos de la empresa a la cual pertenece el empleado logeado
    $em = $this->getEntityManager();
    $empresa_repo = $em->getRepository('BackendBundle:Empresa');
    $idempresa = $empresa_repo->getVerIdempresa($numdoc);
    $dql = "SELECT a FROM BackendBundle:DepartamentoRrhh a 
                INNER JOIN BackendBundle:CentroCosto        b WITH a.idcentroCosto      = b.idcentroCosto
                INNER JOIN BackendBundle:Empresa            c WITH b.idempresa          = c.idempresa
                WHERE c.idempresa = :idempresa";
    $query = $em->createQuery($dql)->setParameter('idempresa', $idempresa);
    $Departamentos = $query->getResult();
    return $Departamentos;
}
这应该行得通

$Departamentos = $empresa_repo->createQueryBuilder('a')
->innerJoin('a.idcentroCosto', 'b')
->innerJoin('b.idempresa', 'c')
->andWhere('c.idempresa = :idempresa')
->setParameter('idempresa', $idempresa)
->getQuery()
->getResult();
执行innerJoin时不需要指定实体,因为 条令已经通过实体映射了解了它。

试试这个

将其添加到DepartmentorHEntity的存储库中

public function getDepartamentoEmpresaEmpleado($numdoc){

    $em = $this->getEntityManager();
    $idempresa = $em->getRepository('BackendBundle:Empresa')->getVerIdempresa($numdoc);

    $query = $this->createQueryBuilder('a')
        ->innerJoin('a.idcentroCosto', 'b')
        ->innerJoin('b.idempresa', 'c')
        ->where('c.idempresa = :idempresa')
        ->setParameter('idempresa', $idempresa)
        ->getQuery();

    $Departamentos = $query->getResult();
    return $Departamentos;
}

希望这能奏效。

非常感谢