2011-11-18 22 views
6

में टाइप करके आइटमों की गणना करें क्या कोई जानता है कि किसी सिद्धांत 2 क्वेरीबिल्डर चयन() कथन में किसी शर्त के आधार पर गिनती कैसे प्राप्त करें?सिद्धांत 2:

यहाँ मैं अब तक की कोशिश की है है ...

मेरा पहला प्रयास eq के साथ गिनती() की कोशिश करने का था()। मुझे प्राप्त त्रुटि में कहा गया है "अपेक्षित करीबी कोष्ठक, बराबर हो गया।"

$qb->select($qb->expr()->count($qb->expr()->eq('t.id', '1'))) 

अगला मैंने() के साथ गिनती() की कोशिश की। मुझे प्राप्त त्रुटि में कहा गया है "अधिकतम फ़ंक्शन घोंसला स्तर तक पहुंच गया।"

$qb->select($qb->expr()->count($qb->having('t.id', '1'))) 

फिर मैंने() और eq() के साथ गिनती() की कोशिश की। फिर मुझे "अधिकतम फ़ंक्शन घोंसला स्तर तक पहुंच गया।"

$qb->select($qb->expr()->count($qb->where($qb->expr()->eq('t.id', '1')))) 

फिर मैंने इन भिन्नताओं को() में उपयोग करने की कोशिश की। वे दोनों सिंटैक्स त्रुटि "से, मिल गया '('

$qb->select($qb->expr()->count($qb->expr()->in('t.id', array(1)))) 
$qb->select($qb->expr()->count($qb->expr()->in('t.id', 1))) 

में के लिए() उदाहरण अपेक्षित देते हैं, मैं भी एक चर के रूप में और setParameter() के माध्यम से मूल्य में गुजर एक ही परिणाम के साथ की कोशिश की।

यहाँ है कि मैं क्या QueryBuilder में कोड करने के लिए कोशिश कर रहा हूँ की MySQL बराबर है:

SELECT 
    SUM(IF(type.id = 1, 1, 0)) AS 'fords', 
    SUM(IF(type.id = 2, 1, 0)) AS 'hondas' 
FROM item 
JOIN type ON item.type_id = type.id 
+4

मत भूलना, कि आप उपयोग कर सकते हैं मूल प्रश्नोत्तरी कभी-कभी यह तेज़ और अधिक सुरुचिपूर्ण है। –

उत्तर

6

छोड़कर आप DQL बात के साथ रहने की जरूरत है, यह मदद मिल सकती है:

public function MyAction() { 

    $this->doctrineContainer = Zend_Registry::get('doctrine'); 
    $em = $this->doctrineContainer->getEntityManager(); 

    $fords = $em->getRepository('My\Entity\Item')->findBy(array('type' => '1')); 
    $hondas = $em->getRepository('My\Entity\Item')->findBy(array('type' => '2')); 

    $fordQty = count($fords); 
    $hondaQty = count($hondas); 

} 

में कुछ विवरण: http://www.doctrine-project.org/docs/orm/2.0/en/reference/working-with-objects.html#by-simple-conditions

+0

धन्यवाद मेंढक - मैंने एक मूल प्रश्न लिखना समाप्त कर दिया, लेकिन मुझे यकीन है कि यह काम में भी आ जाएगा। – cantera

+1

@cantera हमारे साथ मूल प्रश्न साझा करने के लिए अच्छा होगा क्योंकि एक ही समस्या वाले लोगों के लिए सहायक हो सकता है। –

2

क्वेरी बिल्डर का उपयोग करना:

$query = $respository 
     ->createQueryBuilder('u') 
     ->select('count(u)') 
     ->getQuery() 
; 

$total = $query->getSingleResult(); 

:)

2

QueryBuilder का उपयोग करना, कोशिश:

$qb->select(" SUM(CASE WHEN t.id = 1 THEN 1 ELSE 0 END) as fords ") 
->addSelect(" SUM(CASE WHEN t.id = 2 THEN 1 ELSE 0 END) as hondas ") 
संबंधित मुद्दे