我在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")
好吧,我缺席了,但是突然之间没有分组所以在目前的情况下,我明白了。因此,在“缺席”属性中,他仅将我找到的第一个属性与我相对应,但没有提及其中的所有其他属性。
我认为您误解了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;
}
}