目前我有这个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;
}
答案 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;
}
希望这会奏效。