2012-12-16 10 views

उत्तर

35

Doctrine2 में आपको NOW() के बजाय निम्नलिखित में से एक का उपयोग करना होगा।
यह:

CURRENT_TIMESTAMP() 

या:

... 
createQuery(...'WHERE x.date = :now') 
->setParameter('now', new \DateTime('now')) 
... 

आप केवल समय या केवल तारीख उपयोग उन में से एक चाहते हैं: CURRENT_TIME() और CURRENT_DATE()

Documentation can be found here

+0

प्रलेखन लिंक रिपोर्ट नहीं मिला, अपडेट करें। – wesamly

+0

यह CURRENT_TIMESTAMP() चीज़ ने मेरे लिए कभी काम नहीं किया है। क्या आप इसका उदाहरण दे सकते हैं कि इसका उपयोग कैसे किया जाता है? मैं वेब सर्वर के समय, बल्कि डेटाबेस का उपयोग नहीं करना चाहता। मैं हमेशा कच्चे एसक्यूएल (अभी भी बाध्यकारी पैरा) लिख रहा हूं और क्वेरी बिल्डर से गुजर रहा हूं। – ficuscr

+3

यह भी ध्यान दें कि 'डेटटाइम' के लिए 'अब' डिफ़ॉल्ट पैरामीटर है, इसलिए 'नया \ DateTime() 'पर्याप्त है। –

7

का उपयोग करना क्वेरी बिल्डर इसे इस तरह दिखेगा:

$qb 
    ->select('B') 
    ->from('RandomBundle:Banana', 'B') 
    ->where(
     $qb->expr()->gt('B.expiresAt', ':now') 
    ) 
    ->setParameter('now', '\'CURRENT_TIMESTAMP()\''); 

नोट: पैरामीटर सेट पर अतिरिक्त उद्धरण आवश्यक पाने के लिए CURRENT_TIMESTAMP() समारोह काम कर रहे है।

या बस

$qb 
    ->select('B') 
    ->from('RandomBundle:Banana', 'B') 
    ->where(
     $qb->expr()->gt('B.expiresAt', 'CURRENT_TIMESTAMP()') 
    ); 
+0

दूसरे उदाहरण में, आप क्वेरी बिल्डर अभिव्यक्ति – Clamburger

+0

का उपयोग करने के बजाय 'कहां' कॉल के अंदर सीधे 'BexpiresAt> CURRENT_TIMESTAMP() 'तुलना का उपयोग कर सकते हैं, मुझे लगता है कि यह डेटाबेस के समय का उपयोग करना चाहता था, कुछ फ्रंटेंड वेब नहीं सर्वर की। वैकल्पिक विकल्प [परिणामसेट मैपर/मूल क्वेरी] (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html) का उपयोग करना है, या सिद्धांत का विस्तार करना है और अपना खुद का सिद्धांत \ ORM \ क्वेरी \ AST \ Functions लिखें। – ficuscr

संबंधित मुद्दे