【问题标题】:Symfony 4 - Doctrine DQL select collection object doesn't workSymfony 4 - Doctrine DQL 选择集合对象不起作用
【发布时间】:2020-02-29 21:14:11
【问题描述】:

我在 Symfony 上的 DQL 查询有问题。事实上,我有一个实体 Absence,我想在存储库中返回所有缺勤,按缺勤类型分组。

例如我们会:

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")

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

【问题讨论】:

    标签: arrays symfony collections doctrine dql


    【解决方案1】:

    我想你误解了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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多