我有3个实体
。 “Ejuridique”与
有一个“onetomany”关系。 “项目”与
有1个关系“onetomany”。 “照片”
当我对“Ejuridique”进行1次查询并在“项目”上进行级联左侧连接以及“照片”之后,在项目和照片上添加条件时,我失去了所有没有项目的“Ejuridiques”。但即使他们没有项目,我也希望保留所有“Ejuridique”。
我已尝试过针对其他问题提供的所有解决方案,这些问题与在论坛上发现的问题类似,但它仍无效。
在我的存储库中使用querybuilder
class EjuridiqueRepository extends EntityRepository
{
public function myFindAll()
{
$qb = $this->createQueryBuilder('a')
->leftjoin('a.projets', 'pr' )
->leftjoin('pr.photos', 'ph' )
->where('pr.projetPosition = :position_pr')
->ANDwhere('ph.position = :position_ph')
->setParameters(array('position_pr'=> "1",'position_ph'=> "1"))
->addSelect('pr')
->addSelect('ph');
return $qb->getQuery()
->getResult();
}
}
OR与DQL
$dql = "SELECT e,pr,ph FROM chlwebsitesBundle:Ejuridique e LEFT JOIN e.projets pr
LEFT JOIN pr.photos ph WHERE pr.projetPosition=1 AND ph.position=1";
$query = $this->getDoctrine()->getEntityManager()->createQuery($dql);
$ejuridiques = $query->getResult();
我用两种方法丢失了数据。
提前感谢您帮助我
答案 0 :(得分:0)
您的查询存在的问题是您的WHERE
子句具有项目和照片实体的条件,因此不会返回任何这些关系为null的实体。
您需要将这些条件放在LEFT JOIN
即
$qb = $this->createQueryBuilder('a')
->leftjoin('a.projets', 'pr' \Doctrine\ORM\Query\Expr\Join::WITH, 'pr.projetPosition = :position_pr')
->leftjoin('pr.photos', 'ph', \Doctrine\ORM\Query\Expr\Join::WITH, 'ph.position = :position_ph' )
->setParameters(array('position_pr'=> "1",'position_ph'=> "1"))
->addSelect('pr')
->addSelect('ph');