我被困在这里,我花了最后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'
即使我尝试了this thing但没有帮助我。
答案 0 :(得分:27)
您应该使用参数绑定:
$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'));
答案 1 :(得分:9)
您必须记住DQL不是SQL。错误来自Doctrine的Lexer而不是来自MySQL。 DQL不支持INTERVAL(请参阅list of supported functions)。
详细了解adding your own functions,特别是在此处添加了带有INTERVAL支持的DATE_ADD:http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/cookbook/dql-user-defined-functions.html#date-add