gpt4 book ai didi

symfony - 带有理论的查询构建器中的外部联接

转载 作者:行者123 更新时间:2023-12-04 23:19:41 25 4
gpt4 key购买 nike

我有一个名为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;

/* ... */
这是我的存储库实体中的查询,用于针对一个pointComptage恢复具有其属性的compteur:
$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,我可以很好地恢复我的竞争对象,但是只有具有paraMetresMesure关系的竞争对象才可以恢复。
在我的数据库中,comtur具有 而不是参数测量数据是 可能是
如何恢复不具有parametresMesure属性的compteur和具有parametresMesure属性的compteur(在同一queryBuilder中)?
我从原则文档中了解到,queryBuilder中的leftJoin的工作方式类似于外部联接。
我想做的是恢复所有链接到所选 compteurspointComptage,无论 parametresMesure是否。

最佳答案

我找到了解决方案。问题是我在Where子句中添加了条件,但是我需要在leftJoin中指定它们。

这里是我的代码,以了解我的工作:

$queryBuilder = $this->_em->createQueryBuilder();

$queryBuilder
->select ('c')
->from('MySpaceMyBundle:Compteurs', 'c')
->leftJoin('c.pointsComptage', 'pc', 'WITH', 'pc.id = c.pointsComptage')
->leftJoin('c.parametresMesure', 'pm', 'WITH', 'pm.compteurs = c.id')
->leftJoin('pm.typesUnite', 'tu', 'WITH', 'pm.typesUnite = tu.id')
->leftJoin('pm.typesParametre', 'tp', 'WITH', 'pm.typesParametre = tp.id')
->andWhere('c.pointsComptage = :id')
->add('orderBy', 'c.miseEnService', 'ASC')
->setParameter('id', $id);

return $queryBuilder->getQuery()
->getResult();

这样,即使他们没有 compteurs,我也可以恢复所有的 parametresMesure

关于symfony - 带有理论的查询构建器中的外部联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31021572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com