从Doctrine QueryBuilder中的MySQL DATETIME中检索日期

时间:2017-08-08 13:41:19

标签: mysql symfony doctrine

我有一个以 DATETIME 格式存储的MySQL日期。所以我想知道如何在我的Doctrine QueryBuilder的date()子句中使用where。例如,2013-02-01 12:51:17是MySQL中的日期。但我只需要检索日期。这就是我的尝试:

$qb = $this->getEntityManager()->createQueryBuilder()
    ->select('t.balance','a.id','t.date')
    ->from('TestMainBundle:Transaction','t')               
    ->groupBy('a.id')
    ->orderBy('a.id')
    ->where("t.date in date('t.date') "); 

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

我收到以下错误:

  

QueryException:[语法错误]:错误:预期的Doctrine \ ORM \ Query \ Lexer :: T_OPEN_PARENTHESIS,得到'日期'

3 个答案:

答案 0 :(得分:1)

正如评论中指出的那样,你不能在Doctrine中使用特定于mysql的info( action , user_name, modified_date )// both are mapped with TEXT [DataType(DataType.DateTime)] [StringLength(100)] public string basename { get; set; } public DateTime? requirementdate { get; set; } 函数。

但是对于在日期时间字段中搜索特定日期的特定情况,您可以将日期视为字符串,从而使用date()运算符

date_format()

截至

  

但我需要只检索日期

您只需使用LIKE方法格式化返回的值。即。

->Where('t.date LIKE :date')
->setParameter(':date', "$date%")

答案 1 :(得分:0)

您好您可以使用 SUBSTRING 来修复您的问题

->where('SUBSTRING(t.date, 1, 10) IN (:param)')
->setParameter('param', array('2017-04-06'))

答案 2 :(得分:-1)

你的where子句中不需要“date”。

Juste将其删除:

->where('t.date in (:yourwanteddate)')
->setParameter('yourwanteddate', '2013-02-01 12:51:17');