arrays - Symfony 4 - Doctrine DQL 选择集合对象不起作用
问题描述
我对 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;
}
}
推荐阅读
- arrays - 如何使用数组查找/替换选定单元格中的多个值?
- azure-log-analytics - 如何在 kusto 查询中使用正则表达式
- javascript - ReactJS event.target.value 返回未定义
- reactjs - 我正在尝试声明一个变量以匹配在特定布尔字段上匹配 true 的内容帖子
- java - mod_proxy_ajp AJP_ 属性存在但未从 request.getAttributeNames() 中显示
- prometheus - 如何使用 SMPP + Nagios/Centreon 监控服务器?
- xml - 如何在 XQuery 结果中添加 xml 声明和处理指令?
- ios - MLkIT 的文本识别不识别非英文文本
- python - 从分隔符拆分二进制数据
- git - 将给定分支上的提交重置为作者的信息(电子邮件、日期等)