为什么findOneBy返回null而不是结果?

问题描述 投票:0回答:1

我正在使用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;
symfony doctrine-orm doctrine query-builder
1个回答
0
投票

因为您需要将对象而不是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]
}
© www.soinside.com 2019 - 2024. All rights reserved.