2012-01-16 16 views
10

मैं भंडार कक्षा में निम्न विधि का उपयोग कर रहा मेरी डेटाबेस में कुछ टैग के लिए देखने के लिए:Symfony2/सिद्धांत QueryBuilder का उपयोग कर andwhere()

public function getItemsByTag($tag, $limit = null) 
{ 
    $tag = '%'.$tag.'%'; 

    $qb = $this->createQueryBuilder('c'); 

    $qb->select('c') 
     ->where($qb->expr()->like('c.tags', '?1')) 
     ->setParameter(1, $tag) 
     ->addOrderBy('c.clicks', 'DESC'); 

    if (false === is_null($limit)) 
     $qb->setMaxResults($limit); 

    return $qb->getQuery()->getResult(); 
} 

यह सिर्फ अच्छा काम करता है .. लेकिन: मैं कैसे 2 अतिरिक्त जोड़ सकते हैं चर (जहां: समीक्षा की गई = 1, सक्षम = 1)? मैंने कोशिश की और कहीं भी() लेकिन मैं इसे समझ नहीं पाया।

मैं भी पता चला कि कुछ इस तरह:

public function getItems($limit = null) 
{ 
     $qb = $this->createQueryBuilder('b') 
       ->select('b') 
       ->add('where', 'b.reviewed = 1') 
       ->add('where', 'b.enabled = 1') 
       ->addOrderBy('b.name', 'ASC'); 

     // ... 
} 

या तो काम नहीं करेगा ...

किसी भी संकेत?

उत्तर

27

मैं इसे इस तरह लिखना होगा:

->where('c.tags LIKE :tag AND c.reviewed = 1 AND c.enabled = 1') 
+0

धन्यवाद elnur, addOrderBy() आदेश से कोई अलग है()? – Mike

+0

मेरा मानना ​​है कि addOrderBy का उपयोग किया जाता है, आप ऑर्डर के लिए तर्क को जोड़ रहे हैं। उदाहरण के लिए यदि आप 2 ऑर्डर बाई पैरामीटर चाहते थे, तो पहले 'ऑर्डरबी' होगा, इसके बाद 'addOrderBy' होगा। जहां खंड के समान काम करता है। पहला है -> कहां, तो निम्नलिखित सभी लिखे गए हैं '-> addWhere'। –

5

manual से, सुझाव दिया जिस तरह से नीचे की तरह है:

$qb->select(array('c')) 
    ->where($qb->expr()->orx(
     $qb->expr()->eq('c.reviewed', 1), 
     $qb->expr()->eq('c.enabled', 1), 
     $qb->expr()->like('c.tags', '?1') 
    )) 
    ->orderBy('c.clicks', 'DESC')); 
+0

:

$qb = $this ->createQueryBuilder('c') ->where('c.tags LIKE :tag') ->andWhere('c.reviewed = 1') ->andWhere('c.enabled = 1') ->setParameter('tag', "%{$tag}%") ->orderBy('c.clicks', 'DESC') ->addOrderBy('b.name', 'ASC'); if ($limit) { $qb->setMaxResults($limit); } return $qb->getQuery()->getResult(); 

तुम भी उन where की स्थिति को एकजुट कर सकता है ठीक है, इसके लिए धन्यवाद xdazz +1! – Mike

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