2017-09-22 23 views
2

日時が特定の日付と等しいすべての広告インスタンスを取得する必要があります。問題はad.dateフィールドがdatetimeなので、2つの日付を比較するにはどうすればいいですか?日付と日時をdoctrineと比較する方法

私はこれを試してみました:

$result = $query_builder 
      ->select("ad") 
      ->where("DATE(ad.date) = :date") 
      ->setParameter("date", $some_date) 
      ->getQuery() 
      ->getResult(); 

しかし、例外が投げた:私は、仮想プロパティを作成すると考えられてきたが、それはうまくいきませんでした

[Syntax Error] line 0, col 50: Error: Expected known function, got 'DATE' 

答えて

1

あなたの場合、doctrineは "DATE()"が不明の関数であることを示しています。 Doctrineにこの機能はOKであることを伝える必要があります。この質問はhereで議論されました。

基本的には、DoctrineExtensionsを使用する必要があります。あなたをあなただけの一日を比較したい場合は

doctrine: 
    orm: 
     dql: 
      string_functions: 
       DATE: DoctrineExtensions\Query\Mysql\Date 
0

、または一ヶ月、または...:その後、

composer require beberlei/DoctrineExtensions 

そして、あなたのconfig.ymlに追加します。それはコマンドを使用しインストールするには あなたのconfig.ymlファイルでこれを追加することができます。

orm: 
    auto_generate_proxy_classes: '%kernel.debug%' 
    naming_strategy: doctrine.orm.naming_strategy.underscore 
    auto_mapping: true 
    dql: 
     datetime_functions: 
      DAY: DoctrineExtensions\Query\Mysql\Day 
      MONTH: DoctrineExtensions\Query\Mysql\Month 
      YEAR: DoctrineExtensions\Query\Mysql\Year 
      DATE: DoctrineExtensions\Query\Mysql\Date 
      HOUR: DoctrineExtensions\Query\Mysql\Hour 
      MINUTE: DoctrineExtensions\Query\Mysql\Minute 
      SECOND: DoctrineExtensions\Query\Mysql\Second 

、あなたはそのようにそれを使用することができます:

->where('YEAR(associationname.thedatefield) > YEAR(:anotherdate)') 

beberlei/DoctrineExtensions

関連する問題