INTERVAL 1个月没有使用symfony2学说?

时间:2012-04-06 09:21:52

标签: symfony doctrine doctrine-orm

我被困在这里,我花了最后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但没有帮助我。

2 个答案:

答案 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