内联系symfony学说

时间:2017-11-05 16:17:23

标签: symfony doctrine

目前我有这个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;
}

2 个答案:

答案 0 :(得分:0)

这应该有效

$Departamentos = $empresa_repo->createQueryBuilder('a')
->innerJoin('a.idcentroCosto', 'b')
->innerJoin('b.idempresa', 'c')
->andWhere('c.idempresa = :idempresa')
->setParameter('idempresa', $idempresa)
->getQuery()
->getResult();

执行innerJoin时无需指定实体,因为 学说已经通过实体映射了解它。

答案 1 :(得分:0)

试试这个,

在DepartamentoRrhh实体的存储库中添加它

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;
}

希望这会奏效。