2013-06-17 20 views
8

में डेटटाइम फ़ील्ड में केवल समय के साथ खोजें I सिम्फनी 2 और सिद्धांत का उपयोग करते हैं। मेरे डेटाबेस MySQL में, मेरे पास DateTime प्रकार का क्षेत्र है। मेरे रिपोजिटरी फ़ाइल में, QueryBuilder का उपयोग करके, मैं केवल Where खंड में, इस तालिका में केवल तारीख (बिना समय के) और केवल समय के बिना (बिना तारीख के) खोजना चाहता हूं।सिम्फनी 2 और डॉक्टर

मुझे यह कैसे पता चलेगा?

+0

आप देशी क्वेरी का उपयोग कर सकते हैं और फिर यह इकाई – Nisam

उत्तर

16

आप दिनांक() डीक्यूएल के साथ खेलने के लिए सिद्धांत 2 में फ़ंक्शन का विस्तार और पंजीकरण कर सकते हैं। यह solution देखें।

अब अगर आप मेरी समाधान doctrine2 विस्तार, यहाँ नहीं करना चाहती:

आप एक दिन की शुरुआत की दिनांक और की datetime के बीच अंतराल प्राप्त कर सकते हैं:

खोजें तिथि के आधार पर इसका अंत, मैं पहले ही here का उत्तर देता हूं।

यह तिथि (मुझे लगता है) के लिए सबसे साफ समाधान है!

मैं डॉन:

$query = $repository->createQueryBuilder('u')->where('u.createdAt LIKE :date') 
     ->setParameter('date', '2013-05-06%') 
     ->getQuery(); 

     $users = $query->getResult(); 

खोजें घंटे के आधार पर:

अब एक और आसान समाधान के साथ तरह ऑपरेटर एक स्ट्रिंग के रूप में एक datetime क्षेत्र तुलना करने के लिए है, तो आप भी ऐसा कर सकते हैं है स्ट्रिंग के रूप में तुलना करने से डीक्यूएल के साथ एक और समाधान नहीं पता (जब तक आप DATE के साथ सिद्धांत का विस्तार नहीं करते), यहां कोड:

$query = $um->getRepository()->createQueryBuilder('u')->where('u.createdAt LIKE :date') 
     ->setParameter('date', '____-__-__ 10:45:__') 
     ->getQuery(); 

आपको याद दिलाने के लिए, "_" (अंडरस्कोर) का अर्थ है 1 वर्ण (और कोई भी चरित्र!)।

अपने समाधान चुनें; जो मेरे लिए काम करता है मेरे कोड का)

+0

करने के लिए बाध्य है कि आप अपने जवाब के लिए बहुत बहुत धन्यवाद, आप ' एक प्रतिभा फिर से, यह पूरी तरह से काम करते हैं! अंत में, मैं DATE() और TIME() फ़ंक्शन का विस्तार और पंजीकरण करता हूं। मैंने आपके अन्य समाधानों की भी कोशिश की है और सब ठीक है! – JohnDoe66

3

भाग:

$qb->andWhere('s.createdAt LIKE :createdAt'); 
$qb->setParameter('createdAt', $startDate->format("Y-m-d") . "%");