2

我有 3 个实体

. "Ejuridique" 与 "onetomany" 有 1 个关系

. “Project”与“onetomany”有 1 个关系

. “照片”

当我对“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();
        }
}

或使用 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();

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

预先感谢您帮助我

4

1 回答 1

0

您的查询的问题是您的WHERE子句具有项目和照片实体的条件,因此这些关系为空的任何实体都不会返回。

你需要把这些条件放在你的LEFT JOINie中

$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');
于 2014-06-04T06:18:18.153 回答