Symfony 4-Dctrine DQL选择集合对象不起作用

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

我在Symfony上进行DQL查询时遇到问题。实际上,我有一个实体缺席,并且我想在存储库中按缺席类型归还所有缺席。

例如,我们将有:

0 => array:2
    "absences" => Collection(or array, with all Absences objects)
    "type" => "Heures supp"
1 => array:2
    "absences" => Collection(or array, with all Absences objects)
    "type" => "RTT"
...

所以我做了我的功能:

public function getAbsencesValidees($user)
    {
        return $this->createQueryBuilder("a")
            ->select("a as absences, t.nom as type")
            ->join("a.typeConge", "t")
            ->where("a.user = :user")
            ->andWhere("a.etat = 'Validée'")
            ->groupBy("t.nom")
            ->setParameter("user", $user)
            ->getQuery()
            ->getResult();
    }

但是突然在属性“缺席”中,他仅将我放在第一位。他并没有把我所有与那个家伙有关的缺席都给我。但是,如果我撤消引用

->groupBy("t.nom")

好吧,我缺席了,但是突然之间没有分组所以在目前的情况下,我明白了。因此,在“缺席”属性中,他仅将我找到的第一个属性与我相对应,但没有提及其中的所有其他属性。

enter image description here

arrays symfony collections doctrine dql
1个回答
0
投票

我认为您误解了groupBy()的用法。对于您想要执行的操作,您不需要groupBy()

首先,您的查询:

public function getUserAbsences(User $user) {
    $qb=$this->createQueryBuilder("absence");

    $qb->addSelect("partial typeConge.{id, nom}")
       ->join("absence.typeConge", "typeConge")
       ->andWhere("absence.user = :user")
       ->andWhere("absence.etat = 'Validée'")
       ->setParameter("user", $user);

    return $qb->getQuery()->getResult();
}

现在,SQL结果不是多维数组,因此在您的控制器中,您必须过滤此结果。

public function userAbsences(AbsenceRepository $absenceRepository) {
    $absencesByType=array();
    $absences=$absenceRepository->getUserAbsences($this->getUser());

    foreach($absences as $absence) {
        $absencesByType[$absence->getTypeConge->getNom][]=$absence;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.