2012-02-13 19 views
37

क्या यह OR कथन findBy() विधि में कथन का उपयोग करना संभव है? मुझे पता है कि यह देखते हुए सरणी के लिएसिद्धांत या स्थिति के साथ

SELECT * FROM `notif` WHERE status=1 AND status=2 AND status=3; 

अब मैं कुछ चाहिए के लिए खड़े करने के लिए case1 AND case2... के रूप में व्याख्या की है इस

$this->repos['notif']->findBy(array('status' => 1, 'status' => 2, 'status' => 3); 

खड़ा जैसा:

SELECT * FROM `notif` WHERE status=1 OR status=2 OR status=3; 

वहाँ एक रास्ता पाने के लिए है सभी मामलों?

उत्तर

12

जहां तक ​​मुझे पता है कि यह खोजकर्ता द्वारा IN() क्वेरी का उपयोग करने के लिए सिद्धांत द्वारा समर्थित सुविधा नहीं है। 'Notif' भंडार वर्ग

  1. लागू आपके (कस्टम) में एक findByStatus(array $statusTypes) विधि: आप दो बातें कर सकता है। यदि आपको यह दृष्टिकोण पसंद है तो मैं आपको एक उदाहरण दे सकता हूं।

  2. निम्नलिखित करने के लिए अपने findBy कन्वर्ट:

    $qb = $this->repos['notif']->createQueryBuilder('n'); 
    $data = $qb->where($qb->expr()->in('status', array(1,2,3)))->getQuery()->getResult(); 
    

यही काम करना चाहिए या तो :)

+0

Yeay, I'v पहले से ही इस QueryBuilder :) – ArVan

118

आप लिख सकते हैं:

$this->repos['notif']->findBy(array('status' => array(1, 2, 3))); 

और वह भी काम करना चाहिए।

+2

बहुत सरल द्वारा किया जाता है, इस मुझे बहुत बाहर की मदद की ;-) धन्यवाद –

+1

यह निश्चित रूप से चयनित मतदान का जवाब होना चाहिए। – tfont

+2

यदि मैं आवेदन करना चाहता हूं या विभिन्न कॉलम –

7

आप MongoDB का उपयोग कर और अधिक जटिल प्रश्नों, जैसे की जरूरत है रहे हैं, तो साथ या एक साथ जुड़े हुए "से कम", लेकिन एक प्रश्न निर्माता का उपयोग नहीं कर सकते हैं, यह भी इस वाक्य रचना के साथ काम करता है:

->findBy(array(
       '$or' => array(
        array('foo' => array('$lt' => 1234)), 
        array('$and' => array(
         array('bar' => 45678), 
         array('baz' => array('$lt' => 89013)) 
        )) 
       ) 
    )); 

या के रूप में आपके प्रश्न का समाधान:

->findBy(array(
       '$or' => array(
        array('status' => 1), 
        array('status' => 2), 
        array('status' => 3), 
       ) 
    )); 
+2

के बीच यह प्रश्न में उल्लिखित मामले में काम नहीं करता है। यह mongodb विशिष्ट वाक्यविन्यास नहीं है? – karka91

+2

मैंने मोंडोडीबी को सिद्धांत के साथ उपयोग नहीं किया है, लेकिन यह निश्चित रूप से मोंगोडीबी वाक्यविन्यास है। –

+0

आप सही हैं, लेकिन यह पारित हो गया है। मैं इस कोड का उपयोग सिद्धांत और सिम्फनी के साथ उत्पादन में करता हूं और यह काम करता है (लगता है कि पारित किया जाता है) और सही परिणाम देता है। यह मेरा ढेर है ... \t \t "सिद्धांत/mongodb-odm-bundle": "3.0।* @ देव ", \t \t" सिद्धांत/MongoDB-ODM ":" देव-गुरु ", \t \t" सिद्धांत/MongoDB ":" देव-गुरु ", \t \t" ext-मोंगो ":" * ", –

12

मुझे पता है कि यह पुराना सवाल है। वैसे भी, यह जटिल प्रश्नों के लिए Criteria उपयोग करना संभव है (सिद्धांत 2 में कम से कम):

$criteria = new \Doctrine\Common\Collections\Criteria(); 
$criteria 
    ->orWhere($criteria->expr()->contains('domains', 'a')) 
    ->orWhere($criteria->expr()->contains('domains', 'b')); 

$groups = $em 
    ->getRepository('Group') 
    ->matching($criteria); 
+2

जो लोग डाउनवोट करते हैं, कृपया दूसरों को अपना निर्णय समझने में मदद करने के लिए टिप्पणियां छोड़ें धन्यवाद – antongorodezkiy

+0

आप मानदंड कैसे जोड़ सकते हैं और रिपॉजिटरी को नियमों को सीमित और सीमित कर सकते हैं? क्या आप एक उदाहरण साझा कर सकते हैं? अभी, आपके उदाहरण में एसक्यूएल केवल क्लोज़ को जोड़ देगा, हम सीमा और ऑर्डरबाई कैसे जोड़ सकते हैं? –

+0

@ जोसेफअस्ट्रान शायद, दुर्भाग्य से मुझे अब इस बारे में कोई जानकारी नहीं है और इस समय इसका परीक्षण करने के लिए कोई परियोजना नहीं है। लेकिन क्या लेखक के प्रश्न में सीमा या आदेश का कोई उल्लेख है? – antongorodezkiy

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