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