Doctrine запрос к orderBy сумме пользователей в запросе - PullRequest
0 голосов
/ 04 февраля 2019

Я хочу выполнить запрос к сущности пользователей, которые выполнили определенное количество задач каждый.С каждой задачей связаны разные значения баллов, и мне нужно создать запрос, который упорядочит те, у кого наибольшее количество баллов из всех их задач за периоды времени, показанные ниже в $ timeArray.

Я ужепопытался использовать запрос SUM следующим образом:

-> select ('SUM (t.points)') -> orderBy ('t.points', 'DESC')

, но это толькодает массив суммарных баллов для всех, мне нужно вернуть объект, который я могу зациклить, и показать пользователям наибольшее количество баллов по всем их задачам за указанный период времени.

public function getTimePeriodUsers($userType = null)
{   
    $timeArray = [
        '-1 year', 
        '-3 month', 
        '-1 month', 
        '-1 week',
    ];
    foreach($timeArray as $time){
        $date = new \DateTime();
        $date->modify($time);
        if($userType == null){
              $resultsArray[$time] = $this->createQueryBuilder('u')

                    ->leftJoin('u.userTasks', 'ut')
                    ->leftJoin('ut.task', 't')
                    ->leftJoin('t.challenges', 'ch')     
                    ->andWhere('ut.completed > :date')
                    ->andWhere('u.enabled = :enabled')
                    ->setParameter('enabled', true)
                    ->setParameter('date', $date)
                    ->getQuery()
                    ->getResult();


    }

    return  $resultsArray;

}

1 Ответ

0 голосов
/ 04 февраля 2019

Вы можете использовать ключевое слово HIDDEN.По сути, вы можете объявить новое поле в предложении SELECT и пометить его как скрытое, чтобы избежать выборки ORM.

Просто добавьте

->addSelect('SUM(t.points) as HIDDEN score') ->orderBy('score', 'DESC')

Дополнительные ссылки в этой статье здесь и здесь

...