【发布时间】:2015-09-10 08:40:25
【问题描述】:
我有一个名为 PointsComptage.php 的实体和另一个名为 Compteurs.php 的实体。
这是它们之间的关系:
// Compteurs.php
/**
* @var \PointsComptage
*
* @ORM\ManyToOne(targetEntity="PointsComptage", inversedBy="compteurs")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="pointscomptage_id", referencedColumnName="id")
* })
*/
private $pointsComptage;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\OneToMany(targetEntity="ParametresMesure", mappedBy="compteurs")
*/
private $parametresMesure;
/* ... */
// PointsComptage.php
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\OneToMany(targetEntity="Compteurs", mappedBy="pointsComptage")
*/
private $compteurs;
/* ... */
这是我的存储库实体中的查询,用于恢复具有某一点Comptage 属性的compteurs:
$queryBuilder = $this->_em->createQueryBuilder();
$queryBuilder
->select ('c')
->from('MySpaceMyBundle:Compteurs', 'c')
->leftJoin('c.pointsComptage', 'pc')
->join('c.parametresMesure', 'pm')
->join('pm.typesUnite', 'tu')
->join('pm.typesParametre', 'tp')
->where('c.pointsComptage = pc.id')
->andWhere('pm.compteurs = c.id')
->andWhere('pm.typesUnite = tu.id')
->andWhere('pm.typesParametre = tp.id')
->andWhere('c.pointsComptage = :id')
->add('orderBy', 'c.miseEnService', 'ASC')
->setParameter('id', $id);
return $queryBuilder->getQuery()
->getResult();
问题是我为所选的 pointComptage 恢复了我的compteurs,但只有具有parametresMesure 关系的compteurs。
在我的数据库中,可能一个compteur 没有 parametreMesure 数据。
如何恢复没有parametresMesure的compteurs和有parametresMesure属性的compteurs(在同一个queryBuilder中)?
我在教义文档中读到,queryBuilder 中的 leftJoin 的工作方式类似于外连接。
我正在尝试做的是恢复与所选pointComptage 相关联的所有compteurs,无论parametresMesure 是否。
【问题讨论】:
-
如果您在 SO 中搜索“教条外连接”,则有几个答案。其中之一几乎肯定会对您有所帮助。
-
只需使用
leftJoin而不是join -
@PiWi 即使我在 queryBuilder 中使用
leftJoin而不是join,我的请求也会返回相同的结果,即只有具有 parametresMesure 的 compteurs ,但是对于之前选择的 pointComptage,我有一个没有 parametresMesure 的 compteur。
标签: symfony doctrine-orm left-join outer-join query-builder