右边的symfony2 leftjoin条件 - 丢失数据

时间:2014-06-03 15:46:14

标签: symfony join doctrine-orm-postgres

我有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();

我用两种方法丢失了数据。

提前感谢您帮助我

1 个答案:

答案 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');