如何date_trunc(text, timestamp)
在 Symfony 中将 Postgres 函数与 Doctrine 2 一起使用?
问问题
1586 次
1 回答
3
- 在您的项目中,创建一个名为DoctrineExtensions的新文件夹
- 在新文件夹中,创建一个名为DateTrunc.php的文件
- 粘贴此代码:
DateTrunc.php
<?php
namespace YOUR_BUNDLE_HERE\DoctrineExtensions;
use Doctrine\ORM\Query\AST\Functions\FunctionNode,
Doctrine\ORM\Query\Lexer;
/**
* DateTrunc ::= "date_trunc" "(" ArithmeticPrimary "," ArithmeticPrimary ")"
*/
class DateTrunc 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 'date_trunc(' .
$this->firstDateExpression->dispatch($sqlWalker) . ', ' .
$this->secondDateExpression->dispatch($sqlWalker) .
')'; // (7)
}
}
- 将功能添加到 Doctrine 配置中
配置.yml
orm:
dql:
datetime_functions:
date_trunc: YOUR_BUNDLE_HERE\DoctrineExtensions\DateTrunc
5. 你现在可以date_trunc(text, timestamp)
和 Doctrine 一起使用了!
注意:您可以轻松地为每个附加的 Postgres/MySQL 函数调整此代码。结帐准则扩展
于 2015-06-03T18:56:14.660 回答