Конструктор запросов Symfony2 Doctrine использует функцию даты

как использовать функции даты и времени в построителе запросов доктрины, приведенный ниже запрос sql требует преобразования запроса доктрины (DQL).

SELECT SEC_TO_TIME((SUM(TIMESTAMPDIFF(MINUTE, StartTime, EndTime)) + COUNT(*)) * 60) as hours FROM table_name

Ниже я пробовал

$qb = $emClient->createQueryBuilder()->select('SEC_TO_TIME((SUM(TIMESTAMPDIFF(MINUTE, en.startTime, swenendTime)) + COUNT(*)) * 60) as hours')
            ->from('AppBundle:MyEntity', 'en')
$result = $qb->getQuery()->getArrayResult();

Но я получил ошибку неопределенного ключевого слова в столбце 0,7

заранее спасибо


person Robert    schedule 13.03.2018    source источник


Ответы (2)


Doctrine поддерживает следующие встроенные функции: агрегаты" rel="nofollow noreferrer">http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#functions-operators-aggregates

Так что либо вы реализуете свои собственные функции, либо используете простой SQL-запрос $emClient->getConnection()->executeQuery()

person Denis Alimov    schedule 13.03.2018

Чтобы использовать эти функции, вам нужно либо реализовать их самостоятельно, если они не существуют, как предложил @Denis Alimov, либо вы можете использовать уже реализованную функцию с Набор расширений Doctrine. Последний вариант — получить все необходимые данные и выполнить некоторые операции на стороне PHP. Вы также можете выполнить PURE sql и сопоставить его с доктриной с помощью ResultSetMappingBuilder

person Robert    schedule 13.03.2018