php - 我如何在 Doctrine 2 DQL 中使用 DATE()?

标签 php mysql symfony doctrine-orm doctrine

在 Symfony 中,当我在 mysql 中使用以下带有 DATE 函数的查询时,出现错误

    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)"} []

最佳答案

除了已接受的答案之外,https://github.com/beberlei/DoctrineExtensions 上还有大量预建的自定义函数可用。 .

然后可以像这样在你的配置中注册

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

然后可以在您的 DQL 中使用(如在您的查询中)

DATE(jobs.endDate) AS endDate

关于php - 我如何在 Doctrine 2 DQL 中使用 DATE()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25883616/

相关文章:

security - 如何从防火墙中排除路由? (或避免 session cookie)

php - 更改 Woocommerce 订单接收页面中的特定订单详细信息文本

php - Doctrine2+Symfony2 : How can I store entities and mappings in separate bundles?

android - 根据我的需要选择正确的数据库

mysql - 使用查询生成器进行复杂的连接查询

Symfony 2 和 twig : Add a class for 'current page' in navigation

php - 两个日期之间的差异(以分钟为单位,不包括周末和节假日)

php - CSV while 循环不循环

mysql - 如何使用 1and1 作为主机访问 '/tmp/mysqld.sock'?

mysql - 将数组存储在 MySQL 数据库中