2013-03-18 68 views
0

当我运行在where子句中,以下错误显示与日期查询dateformate ...查询在其中Symfony2的条款

[Syntax Error] line 0, col 129: Error: Expected known function, got 'DATE_FORMAT' 

查询如下

$query = $this->getEntityManager()->createQuery(
    "SELECT a.id, a.amont, a.paymentDescrip, a.paymentType, a.paymentDate 
    FROM RegalSmsBundle:DailyTransaction a 
    WHERE DATE_FORMAT(a.paymentDate,'%Y-%m-%d') = :paymentDate 
     and a.students = :studentId" 

    )->setParameter('studentId', $studentId) 
    ->setParameter('paymentDate','2013-03-11'); 


return $query->getResult(); 

回答

0

学说没有按给定没有DATE_FORMAT函数默认定义。有可能Register Custom DQL Function

但是你可以很容易地比较不同的日期(假设a.paymentDatedate类型):

$query = $this->getEntityManager()->createQuery(" 
     SELECT a.id, a.amont, a.paymentDescrip, a.paymentType, a.paymentDate 
     FROM RegalSmsBundle:DailyTransaction a 
     WHERE a.paymentDate = :paymentDate AND a.students = :studentId 
    ") 
    ->setParameter('studentId', $studentId) 
    ->setParameter('paymentDate', new \DateTime('2013-03-11')) 
; 

return $query->getResult(); 

编辑:我更喜欢使用querybuider编写DQL。它看起来像这样:

$qb = $this->getEntityManager()->getRepository('RegalSmsBundle:DailyTransaction')->createQueryBuilder('a'); 
$qb 
    ->select('a') // select whole entity 
    ->where($qb->expr()->andX(
     $qb->expr()->eq('a.paymentDate', ':paymentDate') 
     $qb->expr()->eq('a.students', ':studentId') 
    )) 
    ->setParameter('studentId', $studentId) 
    ->setParameter('paymentDate', new \DateTime('2013-03-11')) 
; 

return $qb->getQuery()->getResult(); 
+0

感谢您的回答。但在我的数据库中,a.pymentDate格式是日期(Y-m-d h:m:s)。它如何与DateTime('2013-03-11')格式进行比较 – Tushar 2013-03-19 00:20:16

+0

Doctrine在执行DQL查询时将'\ DateTime'转换为数据库日期类型。 – 2013-03-19 16:44:10

+0

在表中有一个条目paymentDate是'2013-03-11 16:37:01'。 wehen - > setParameter('paymentDate',new \ DateTime('2013-03-11 16:37:01'))它的工作正常,但 - > setParameter('paymentDate',new \ DateTime('2013-03-11' ))..查询没有得到任何记录 – Tushar 2013-03-19 17:29:02