2013-01-08 47 views
8

मेरे पास नीलामी नामक एक इकाई है जिसमें दो फ़ील्ड डेटाटाइम: दिनांक 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  

उत्तर

2
तो यहाँ एक कस्टम समारोह की पूरी कार्यान्वयन TIME_DIFF है

आप MySQL के TIMEDIFF का उपयोग कर सकते हैं (TIME_TO_SEC के साथ और 60 तक विभाजित करें):

TIME_TO_SEC(TIMEDIFF(date1, date2))/60; 

मेरा मानना ​​है कि आप इसे DCTDINE2 में this example में DATE_DIFF के लिए कार्यान्वित कर सकते हैं।

+0

मुझे आशा है कि इसके लिए कुछ अंतर्निहित डीक्यूएल समाधान होगा। लेकिन ऐसा लगता है कि कस्टम फ़ंक्शन को परिभाषित करना आवश्यक होगा। धन्यवाद। – JohnM2

+1

और यहां जानकारी सिम्फनी 2 में ऐसे कस्टम फ़ंक्शन को पंजीकृत करने के लिए कैसे करें: http://symfony.com/doc/2.0/cookbook/doctrine/custom_dql_functions.html – JohnM2