2014-10-10 68 views
4

我有一個createQueryBuilder內部的一些問題DATE_FORMAT主義的QueryBuilder DATE_FORMAT不工作

我的代碼:

$qb7Days = $repo->createQueryBuilder('R') 
     ->select('R.createdAt') 
     ->where("DATE_FORMAT(R.createdAt, '%Y-%m-%d') = :afterDays") 
     ->andWhere('R.cCurrentReviewState = :state') 
     ->andWhere('R.reminder = :reminder') 
     ->setParameter('afterDays', $after7Days) 
     ->setParameter('state', $oReviewStateNotVerified) // not_verified 
     ->setParameter('reminder', 0) // never sent any reminder 
     ->orderBy('R.id', 'ASC') 
     ->getQuery(); 

但即時得到

[Doctrine\ORM\Query\QueryException]            
[Syntax Error] line 0, col 7: Error: Expected known function, got 'DATE_FORMAT' 

我搜索了一些鏈接,找到一些解釋說它應該以這種方式工作,但對我來說,它看起來像我做錯了什麼。

http://www.uvd.co.uk/blog/labs/using-mysqls-date_format-in-doctrine-2-0/

+0

是的,它是完美的。它工作在簡單的查詢 – 2014-10-10 11:19:33

回答

11

DATE_FORMAT以及一堆Mysql函數都不能直接在Doctrine中使用。

要使用它們,你可以創建你自己或添加等擴展beberlei/DoctrineExtensions,然後添加相應的功能,以您的教條捆綁的配置一樣

doctrine: 
    dbal: 
     .... 
    orm: 
     .... 
     dql: 
      string_functions: 
       DATE_FORMAT: DoctrineExtensions\Query\Mysql\DateFormat 
+0

謝謝。我只是按照教程在http://www.uvd.co.uk/blog/labs/using-mysqls-date_format-in-doctrine-2-0/和工程真棒:) – 2014-10-10 12:42:30

+0

我做到了這樣:在向供應商模塊添加DoctrineExtensions之後,向我的_EntityManager_ Factory添加了'$ config-> addCustomStringFunction('DATE_FORMAT','DoctrineExtensions \ Query \ Mysql \ DateFormat');'。這裏'$ config'是_Doctrine \ ORM \ Configuration_的實例,作爲_EntityManager :: create()_的第二個參數傳遞。 – rkok 2015-01-28 14:11:41

+0

我愛主義實體,但我**討厭**主義查詢建設者! GRR#@! – hejdav 2016-08-09 11:48:43

1

DATE_FORMAT不是教義,識別的功能。你粘貼的那個鏈接是作者寫給他的自定義代碼以獲得date_formate。您可以在教義中編寫自定義函數並註冊它們,整潔?

這裏是如何做到這一點的例子 - http://symfony.com/doc/current/cookbook/doctrine/custom_dql_functions.html

選擇1:你寫的自定義功能DATE_FORMAT,讓您可以一次又一次地使用它。 選項2:可能重新格式化PHP的時間,以匹配在數據庫中的日期格式,有點像

$ after7Days->格式( 'Y-M-d');

0

DATE_FORMAT不是字符串函數,其date_function:

config.yml

doctrine: 
    orm: 
     dql: 
      datetime_functions: 
       date_format: DoctrineExtensions\Query\Mysql\DateFormat 
0

我不確定,但這僅適用於我:

doctrine: 
    orm: 
     entity_managers: 
      default: 
       ... 
       dql: 
        datetime_functions: 
         DATE_FORMAT: DoctrineExtensions\Query\Mysql\DateFormat