1

MySQL DATEDIFF 関数を使用するつもりでしたが、成功したことはありません。

ここのチュートリアルに従いました:

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/cookbook/dql-user-defined-functions.html

構成を適切に設定しました

$config = new Configuration;
$config->addCustomStringFunction('DATEDIFF', 'Project\ORM\MySql\DateDiff');

また、ファイルを正しい場所に配置しました。

現在、私のアンダーライブラリのパスは次のとおりです。

libraries
--Doctrine
--Project
----ORM
------MySql
---------DateDiff.php
--Doctrine.php

そして、DateDiff.php の私のコードは次のとおりです。

class DateDiff extends FunctionNode
{
// (1)
public $firstDateExpression = null;
public $secondDateExpression = null;

public function parse(\Doctrine\ORM\Query\Parser $parser)
{
    $parser->match(Lexer::T_IDENTIFIER); // (2)
    $parser->match(Lexer::T_OPEN_PARENTHESIS); // (3)
    $this->firstDateExpression = $parser->ArithmeticPrimary(); // (4)
    $parser->match(Lexer::T_COMMA); // (5)
    $this->secondDateExpression = $parser->ArithmeticPrimary(); // (6)
    $parser->match(Lexer::T_CLOSE_PARENTHESIS); // (3)
}

public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
    return 'DATEDIFF(' .
        $this->firstDateExpression->dispatch($sqlWalker) . ', ' .
        $this->secondDateExpression->dispatch($sqlWalker) .
    ')'; // (7)
}
}

そして、これは私がそれを捕まえようとする方法です:

$this->doctrine->em->
createQuery('SELECT a FROM models\user_table a 
WHERE a.user_id = '.$user_id.' 
AND DATEDIFF(NOW(), a.created_at) < 1')
->getResult();

基本的にクックブックに書かれていることをコピーしただけです。

ただし、アプリケーションが出力を表示できないため、機能させることができません。エラーなし。そこで止まります。

問題がどこにあるのか誰にも分かりますか? パスの問題ですか?それとも私はそれを正しく呼んでいませんか?

アドバイスをいただければ幸いです。

ありがとう!

4

0 に答える 0