mah*_*n3d 5 php mysql doctrine symfony doctrine-orm
在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
Run Code Online (Sandbox Code Playgroud)
为什么这有什么样的解决方法可以克服这种情况,在数据库中这些字段即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)"} []
Run Code Online (Sandbox Code Playgroud)
qoo*_*mao 12
除了公认的答案之外,https://github.com/beberlei/DoctrineExtensions还提供了大量预先构建的自定义函数.
然后可以在您的配置中注册这些
doctrine:
orm:
dql:
string_functions:
DATE: DoctrineExtensions\Query\Mysql\Date
Run Code Online (Sandbox Code Playgroud)
然后可以在您的DQL中使用(如在您的查询中)
DATE(jobs.endDate) AS endDate
Run Code Online (Sandbox Code Playgroud)
小智 9
或者,如果您不想添加新的依赖项,可以使用如下代码:
$dateTime = new \DateTime();
$qb
->andWhere('jobs.endDate BETWEEN :dateMin AND :dateMax')
->setParameters(
[
'dateMin' => $dateTime->format('Y-m-d 00:00:00'),
'dateMax' => $dateTime->format('Y-m-d 23:59:59'),
]
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14366 次 |
| 最近记录: |