2012-04-03 13 views
6

जब मैं अपनी क्वेरी में पैरामीटर का उपयोग करने लगते हैं, मैं कोई त्रुटि मिलती हैDoctrine2 setParameters का उपयोग कर

अमान्य पैरामीटर संख्या: बाध्य चर की संख्या टोकन की संख्या से मेल नहीं खाता

यहाँ मेरी कोड है

public function GetGeneralRatingWithUserRights($user, $thread_array) 
{ 
    $parameters = array(
     'thread' => $thread_array['thread'], 
     'type' => '%'.$thread_array['type'].'%' 
    ); 

    $dql = 'SELECT p.type,AVG(p.value) 
     FROM TrackerMembersBundle:Rating p 
     GROUP BY p.thread,p.type'; 

    $query = $this->em->createQuery($dql) 
     ->setParameters($parameters); 

    $ratings = $query->execute(); 

    return $ratings; 
} 

मैं पैरामीटर सरणी को सही ढंग से कैसे कॉन्फ़िगर कर सकता हूं?

+0

का उपयोग कर इस क्वेरी को परिभाषित नहीं करता कोई पैरामीटर बाध्य होने के लिए:

$parameters = array( 'thread' => $thread_array['thread'], 'type' => '%'.$thread_array['type'].'%' ); $dql = 'SELECT p.type,AVG(p.value) FROM TrackerMembersBundle:Rating p WHERE p.thread=:thread AND type LIKE :type GROUP BY p.thread,p.type'; $query = $this->em->createQuery($dql) ->setParameters($parameters); 

दस्तावेज में उदाहरण देखें। शायद एक टाइपो? @ क्यूबा का समाधान सही उदाहरण है, लेकिन इस डीक्यूएल के लिए आपको पैरामीटर की आवश्यकता नहीं है :) – Ocramius

उत्तर

21

आपने क्वेरी में अपने पैरामीटर शामिल नहीं किए हैं। सब आपके प्रयासों के लिए http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#dql-select-examples

+0

हाँ। पीडीओ के तैयार वक्तव्यों के बारे में अधिक परेशान चीजों में से एक यह है कि अतिरिक्त पैरामीटर होने से त्रुटि उत्पन्न हो जाएगी। – Cerad

+2

मैं वास्तव में कहूंगा कि यह एक अच्छी बात है। यदि आप प्लेसहोल्डर्स की तुलना में अधिक पैरामीटर पास कर रहे हैं, तो आपने कुछ गलत किया है और इसके बारे में सूचित होना बेहतर है। –

3

धन्यवाद, मैं इसे इस्तेमाल किया अलग ढंग से querybuilder

 $parameters = array(
     'thread' => $thread_array['thread'] 
     ,'type' => $thread_array['type'] 
    ); 


    $qb = $this->em->createQueryBuilder(); 
    $query = $qb 
     ->from('TrackerMembersBundle:Rating','rating') 
     ->select(' rating.type, 
     COUNT(rating.value) AS ratingcount , 
     AVG(rating.value) AS ratingaverage ') 
     ->where(
     $qb->expr()->orx(
      $qb->expr()->eq('rating.thread', ':thread'), 
      $qb->expr()->like('rating.type', ':type') 
     ) 

    ) 
     ->groupBy('rating.thread,rating.type') 
     ->setParameters($parameters) 
     ->getQuery(); 
+5

आपने इसे अलग-अलग हल नहीं किया है लेकिन केवल प्रश्न बनाने के विभिन्न तरीकों का उपयोग किया है। यह काम करता है क्योंकि आपने पैरामीटर को बाध्य करने के लिए प्रदान किया है (जैसा कि मैंने सुझाव दिया था)। –

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