Количество подзапросов в доктрине - конструктор запросов

У меня простой запрос:

$this->qb->select('l.value')
        ->addSelect('count(l) AS cnt')
        ->addSelect('hour(l.time) AS date_hour')
        ->from(Logs::class, 'l')
        ->where('l.header = :header')
        ->groupBy('l.value')
        ->addGroupBy('date_hour')
        ->setParameter('header', 'someheader')

Этот код выбирает 3 столбца с одним условием и двумя groupBy.

Я хочу получить количество записей этого запроса. Конечно, я не хочу скачивать все записи и проверять размер скачиваемых данных.

Вопрос: Как перестроить этот запрос и получить результат из БД как singleScalarValue ()?

Этот запрос не возвращает единичный скалярный результат. Мне нужно восстановить его, но я не знаю, как

Thomas Banderas 16.11.2018 12:25

Что ты хочешь посчитать? Рекорды, время или какая-то ценность?

Odin Thunder 16.11.2018 13:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
1 819
2

Ответы 2

Я думаю, вам следует использовать (столбец id для подсчета) здесь:

    ->addSelect('count(l) AS cnt')

Что-то вроде этого, но если вы покажете свою сущность, я могу предложить правильное решение:

         $this->qb->select('l')
        ->addSelect('count(l.id) AS cnt')
        ->addSelect('hour(l.time) AS date_hour')
        ->from(Logs::class, 'l')
        ->where('l.header = :header')
        ->groupBy('l.value')
        ->addGroupBy('date_hour')
        ->setParameter('header', 'someheader')

$count = $qb->getQuery()->getSingleScalarResult();

Как из выбранных 3 столбцов получить один скалярный результат? :П

Thomas Banderas 16.11.2018 12:30

Хм .. Понятно .. наверное, единственный способ - это индивидуальный запрос.

MorganFreeFarm 16.11.2018 12:34

Поскольку GROUP BY + COUNT + getSingleScalarResult, похоже, не работает вместе в запросах DQL, я думаю, ваш лучший вариант - посчитать потом

$sub
    ->select('l.id')
    ->addSelect('l.value as hidden val')
    ->addSelect('hour(l.time) AS hidden date_hour')
    ->from(Logs::class, 'l')
    ->where('l.header = :header')
    ->groupBy('val')
    ->addGroupBy('date_hour')
    ->setParameter('header', 'someheader')
;

$subIds = array_column($sub->getQuery()->getResult(), 'id');
$count = count($subIds);

Другие вопросы по теме

Похожие вопросы