我正在使用Symfony 3.4
[当我运行以下命令时,我得到一个结果:
SELECT * FROM ternaire_grille_hebergement_periode WHERE grille_id = x AND hebergement_id = y AND periode_id = z;
并且它是正确的。
但是当我使用时
findOneBy(array("hebergement"=>$hebergement, "grille"=>$grille, "periode"=>$periode))
它返回null
。
并且此存储库方法返回一个空数组:
public function getTernaireByGrilleHebPeriode($grilleId, $hebergementId, $periodeId){
$qb = $this->createQueryBuilder("q")
->where("q.hebergement = :hebergement")
->andWhere("q.grille = :grille")
->andWhere("q.periode = :periode")
->setParameters(array("hebergement"=>$hebergementId, "grille"=>$grilleId, "periode"=>$periodeId));
return $qb->getQuery()->getResult();
}
怎么可能?我转储了,似乎我使用了正确的ID和对象。
编辑
这是我的TernaireGrilleHebergementPeriode:
/**
* @ORM\ManyToOne(targetEntity="Grille", inversedBy="ternaireGrilleTarifHebergementPeriode")
*/
private $grille;
/**
* @ORM\ManyToOne(targetEntity="Hebergement", inversedBy="ternaireGrilleTarifHebergementPeriode")
*/
private $hebergement;
/**
* @ORM\ManyToOne(targetEntity="Periode", inversedBy="ternaireGrilleTarifHebergementPeriode")
*/
private $periode;
Periode.php:
/**
* @ORM\OneToMany(targetEntity="TernaireGrilleHebergementPeriode", mappedBy="periode")
*/
private $TernaireGrilleHebergementPeriode;
Hebergement.php:
/**
* @ORM\OneToMany(targetEntity="TernaireGrilleHebergementPeriode", mappedBy="hebergement")
*/
private $TernaireGrilleHebergementPeriode;
Grille.php:
/**
* @ORM\OneToMany(targetEntity="TernaireGrilleHebergementPeriode", mappedBy="grille")
*/
private $TernaireGrilleHebergementPeriode;
因为您需要将对象而不是ID传递给查询生成器。尝试
public function getTernaireByGrilleHebPeriode(Grille $grille, Hebergement $hebergement, Periode $periode){
$qb = $this->createQueryBuilder("q")
->where("q.hebergement = :hebergement")
->andWhere("q.grille = :grille")
->andWhere("q.periode = :periode")
->setParameters(array("hebergement"=>$hebergement, "grille"=>$grille, "periode"=>$periode));
return $qb->getQuery()->getResult();
}
这应该可以解决问题,如果我正确的话,查询生成器也将返回数组而不是单个对象,您可以像这样获得单个结果
if($queryResult && count($queryResult)) {
$singleObject = $queryResult[0]
}