Intereting Posts
обновление раскрывающегося списка изменений другого раскрывающегося списка с помощью php-ajax Запускать страницу PHP каждый час автоматически – без использования заданий Cron PHP, анализирующий пространство имен georss с помощью simpleXML Создайте таблицу с пробелом в имени в mySQL PHP, как удалить дополнительные символы в конце и начале строки phpmyadmin error "# 1062 – Дублировать запись '1' для ключа 1" Написание и редактирование файла конфигурации PHP из HTML-формы? Удаление файлов изображений с сервера Является ли это правильным объектно-ориентированным программированием в php? Неустранимая ошибка: класс «CModelEvent» не найден в CModel.php в строке 189 Регулярное выражение для извлечения текста ссылки из тега привязки Как вставить следующий самый высокий номер в базу данных PHP показывает изображение как BLOB mysqli PHP не может найти драйвер MongoDB Правильный способ установки driverOptions для конфигурации DBAL Doctrine в symfony2

Как использовать DATE () в Doctrine 2 DQL?

IN Symfony, когда я использовал следующий запрос с функцией DATE в mysql, я получаю ошибку

SELECT employer.companyName AS employerName, jobs.jobId, jobs.industryId, jobs.focusId, jobs.companyName, jobs.employerId, jobs.jobTitle, DATE(jobs.createdDate) AS createdDate , DATE(jobs.endDate) AS endDate , jobs.replyTo, jobs.featured , jobs.jobType, jobs.status FROM Acme\\AppsBundle\\Entity\\Jobs jobs , Acme\\AppsBundle\\Entity\\Employer employer WHERE jobs.employerId = employer.employerId GROUP BY jobs.jobId ORDER BY jobs.jobId DESC 

Почему это и какое обходное решение существует для преодоления этой ситуации, в базе данных эти поля, т.е. end_date, хранятся в виде типа mysql 'date'

  [2014-09-17 05:52:42] request.CRITICAL: Uncaught PHP Exception Doctrine\ORM\Query \QueryException: "[Syntax Error] line 0, col 138: Error: Expected known function, got 'DATE'" at /.../Doctrine/ORM/Query/QueryException.php line 52 {"exception":"[object] (Doctrine\\ORM\\Query\\QueryException: [Syntax Error] line 0, col 138: Error: Expected known function, got 'DATE' at /var/w.../doctrine/orm/lib/Doctrine/ORM/Query /QueryException.php:52, Doctrine\\ORM\\Query\\QueryException: SELECT employer.companyName AS employerName, jobs.jobId, jobs.industryId, jobs.focusId, jobs.companyName, jobs.employerId, jobs.jobTitle, DATE(jobs.createdDate) AS createdDate , DATE(jobs.endDate) AS endDate , jobs.replyTo, jobs.featured , jobs.jobType, jobs.status FROM Acme\\AppsBundle \\Entity\\Jobs jobs , Acme\\AppsBundle\\Entity\\Employer employer WHERE jobs.employerId = employer.employerId GROUP BY jobs.jobId ORDER BY jobs.jobId DESC at /var/w... /doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php:41)"} [] 

DQL знает только о нескольких стандартных функциях sql (например, coalesce ). Чтобы иметь возможность использовать свою настраиваемую функцию, вам необходимо зарегистрировать ее и сообщить doctrine как ее перевести в сырой sql. Следуйте этим руководствам:

Symfony Doc

Доктрина Док

И проверьте мой ответ здесь

В дополнение к принятому ответу есть тонна готовых пользовательских функций, доступных на https://github.com/beberlei/DoctrineExtensions .

Затем они могут быть зарегистрированы в вашей конфигурации как

 doctrine: orm: dql: string_functions: DATE: DoctrineExtensions\Query\Mysql\Date 

и затем может использоваться в вашем DQL (как в вашем запросе), например

 DATE(jobs.endDate) AS endDate