2012-04-06 9 views
6

私はここにこだわっていますが、この問題を解決するのに最後の2日間を費やしましたが失敗しました。私は今月のエントリを取得するために私のリポジトリ内にクエリを書いています。ここに私のクエリは次のとおりです。 -INTERVAL 1 MONTH not symfony2 doctrineで動作しませんか?

$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)') 

私はこれを実行しようとすると、それも私がthis thingを試みたが、私を助けていなかった私にエラー

[Syntax Error] line 0, col 133: Error: Expected Doctrine\ORM\Query\Lexer::T_COMMA, got '1' 

を与えます。

答えて

24

あなたはバインドパラメータを使用する必要があります。

$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')); 
+0

jkucharovicに感謝します。とても便利でした。 INTERVAL 1年で同じことをする方法を教えてください。 – ScoRpion

+0

'$ query-> setParameter( 'date'、new \ DateTime( ' - 1 year'));' – jkucharovic

+0

ここに – ScoRpion

7

DQLはSQLではないことに注意してください。このエラーはDoctrineのLexerが原因であり、MySQLのものではありません。 DQLはINTERVALをサポートしていません(list of supported functions参照)。ここでは具体的にINTERVALサポートしてDATE_ADDを追加adding your own functions

読むより、:http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/cookbook/dql-user-defined-functions.html#date-add

+1

これが受け入れ答えなければなりません。 –

関連する問題