我有一个名为Auction的实体,它有两个类型为datetime的字段: date1和date2。我想选择所有拍卖行,其中date1和date2之间的差异小于30分钟。如何使用Doctrine查询语言做到这一点?
DATE_DIFF(date1,date2)文档中写着“计算Date1-Date 2之间的days在Date1-Date 2中的差异”。我需要的是每分钟的差别。
编辑:下面是自定义函数TIME_DIFF的完整实现
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
/**
* Custom DQL function returning the difference between two DateTime values
*
* usage TIME_DIFF(dateTime1, dateTime2)
*/
class TimeDiff extends FunctionNode
{
/**
* @var string
*/
public $dateTime1;
/**
* @var string
*/
public $dateTime2;
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->dateTime1 = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_COMMA);
$this->dateTime2 = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return 'TIME_TO_SEC(TIMEDIFF(' .
$this->dateTime1->dispatch($sqlWalker) . ', ' .
$this->dateTime2->dispatch($sqlWalker) .
'))';
}
}然后在您的app/config/config.yml中添加以下内容:
doctrine:
(...)
orm:
(...)
dql:
numeric_functions:
time_diff: MyProject\DQL\TimeDiff 发布于 2013-01-08 14:45:55
您可以使用MySQL的TIMEDIFF (使用TIME_TO_SEC并除以60):
TIME_TO_SEC(TIMEDIFF(date1, date2)) / 60;我相信您可以在Doctrine2中实现它,就像在这个例子 for DATE_DIFF中一样。
https://stackoverflow.com/questions/14216376
复制相似问题