8
我有一個實體名爲拍賣與兩個字段的類型datetime:date1和date2。我想選擇所有拍賣行,其中date1和date2之間的差異小於30分鐘。我如何使用Doctrine查詢語言來做到這一點?如何在Doctrine查詢語言(dql)中獲取日期差異?
DATE_DIFF(DATE1,DATE2)的文件說, 「計算在天 DATE1-DATE2之間的區別」。我在哪裏需要與分鐘的差異。
編輯:所以這裏是一個自定義功能的完整實現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) .
'))';
}
}
在您的應用程序/配置/ config.yml
然後補充一點:
doctrine:
(...)
orm:
(...)
dql:
numeric_functions:
time_diff: MyProject\DQL\TimeDiff
我希望這裏會有一些內置的dql解決方案。但似乎定義自定義函數將是必要的。謝謝。 – JohnM2
這裏的信息如何在Symfony2中註冊這樣的自定義函數:http://symfony.com/doc/2.0/cookbook/doctrine/custom_dql_functions.html – JohnM2