मेरे पास नीलामी नामक एक इकाई है जिसमें दो फ़ील्ड डेटाटाइम: दिनांक 1 और दिनांक 2 है। मैं सभी नीलामी पंक्तियों को चुनना चाहता हूं जहां दिनांक 1 और दिनांक 2 के बीच का अंतर 30 मिनट से कम है। मैं सिद्धांत क्वेरी भाषा का उपयोग करके यह कैसे कर सकता हूं?सिद्धांत क्वेरी भाषा (डीक्यूएल) में तिथि अंतर कैसे प्राप्त करें?
DATE_DIFF (DATE1, DATE2) प्रलेखन के रूप में कहते हैं, "दिन DATE1-DATE2 के बीच में अंतर की गणना करें"। जहां मुझे मिनट में अंतर की आवश्यकता है।
संपादित:
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/config.yml में
इस जोड़ें::
doctrine:
(...)
orm:
(...)
dql:
numeric_functions:
time_diff: MyProject\DQL\TimeDiff
मुझे आशा है कि इसके लिए कुछ अंतर्निहित डीक्यूएल समाधान होगा। लेकिन ऐसा लगता है कि कस्टम फ़ंक्शन को परिभाषित करना आवश्यक होगा। धन्यवाद। – JohnM2
और यहां जानकारी सिम्फनी 2 में ऐसे कस्टम फ़ंक्शन को पंजीकृत करने के लिए कैसे करें: http://symfony.com/doc/2.0/cookbook/doctrine/custom_dql_functions.html – JohnM2