Я хочу выполнить запрос, который будет выглядеть так в собственном SQL:
SELECT
AVG(t.column) AS average_value
FROM
table t
WHERE
YEAR(t.timestamp) = 2013 AND
MONTH(t.timestamp) = 09 AND
DAY(t.timestamp) = 16 AND
t.somethingelse LIKE 'somethingelse'
GROUP BY
t.somethingelse;
Если я пытаюсь реализовать это в построителе запросов Doctrine следующим образом:
$qb = $this->getDoctrine()->createQueryBuilder();
$qb->select('e.column AS average_value')
->from('MyBundle:MyEntity', 'e')
->where('YEAR(e.timestamp) = 2013')
->andWhere('MONTH(e.timestamp) = 09')
->andWhere('DAY(e.timestamp) = 16')
->andWhere('u.somethingelse LIKE somethingelse')
->groupBy('somethingelse');
Я получаю исключение ошибки
[Синтаксическая ошибка] строка 0, col 63: Ошибка: ожидаемая известная функция, полученная 'YEAR'
Как я могу реализовать свой запрос с помощью конструктора запросов Doctrines?
Примечания:
- Я знаю о Doctrine Native SQL. Я пробовал это, но это приводит к тому, что мои рабочие таблицы и базы данных моей разработки имеют разные имена. Я хочу работать с агностиком базы данных, поэтому это не вариант.
- Хотя я хочу работать db agnostic: FYI, я использую MySQL.
- Есть способ расширить Доктрину, чтобы "узнать" инструкции
YEAR()
и т.д., например. как здесь. Но я ищу способ избежать включения сторонних плагинов.