8

我被困在这里,我花了最后 2 天解决这个问题,但失败了。我正在我的存储库中编写一个查询以获取当月的条目。这是我的查询:-

$this->getEntityManager()
 ->createQuery('SELECT count(a) FROM CollegeStudentBundle:StudentAttendance a where a.student_id='.$id.'
 and a.date > DATE_SUB(CURRENT_TIMESTAMP(),INTERVAL 1 MONTH)')

当我尝试运行它时,它给了我一个错误

[Syntax Error] line 0, col 133: Error: Expected Doctrine\ORM\Query\Lexer::T_COMMA, got '1'

即使我尝试了这件事,但并没有帮助我。

4

2 回答 2

29

您应该使用参数绑定:

$query = $em->createQuery('SELECT count(a) FROM CollegeStudentBundle:StudentAttendance a where a.student_id = :id and a.date > :date');
$query->setParameter('id', $id);
$query->setParameter('date', new \DateTime('-1 month'));
于 2012-04-06T11:11:12.963 回答
9

您必须记住,DQL 不是 SQL。该错误来自 Doctrine 的 Lexer,而不是来自 MySQL。DQL 不支持 INTERVAL(请参阅支持的函数列表)。

阅读更多关于添加您自己的函数,特别是在此处添加带有 INTERVAL 支持的 DATE_ADD:http: //doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/cookbook/dql-user-defined-functions.html#添加日期

于 2012-04-06T11:09:08.890 回答