如何使用 Postgres date_trunc(text, timestamp)
Symfony 中的 Doctrine 2 功能如何?
最佳答案
- 在您的项目中,创建一个名为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 配置
config.yml
orm:
dql:
datetime_functions:
date_trunc: YOUR_BUNDLE_HERE\DoctrineExtensions\DateTrunc
5.您现在可以使用date_trunc(text, timestamp)
与教义!
注意:您可以轻松地为每个附加的 Postgres/MySQL 函数调整此代码。结账DoctrineExtensions
关于symfony - Symfony 中的 Postgres date_trunc(text, timestamp) 与 Doctrine 2 ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30628393/