我一直想使用 MySQL DATEDIFF 功能,但我从未成功过。
我按照这里的教程:
我已正确设置配置
$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();
我基本上只是复制了食谱中写的内容。
但是,我无法让它工作,因为我的应用程序无法显示任何输出。没有错误。它就停在那里。
有人知道问题可能出在哪里吗?是路径问题吗?还是我没有正确调用它?
任何建议将不胜感激。
谢谢!