2012-04-03 13 views
6

cuando me parecen utilizar parámetros en mi consulta, me sale un errorDoctrine2 utilizando setParameters

número de parámetro no válido: número de variables ligadas no coincide con el número de fichas

aquí es mi código

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; 
} 

¿cómo configuro la matriz de parámetros correctamente?

+0

Esta consulta no define ningún parámetro en obligarse. Tal vez un error tipográfico? La solución de @kuba es el ejemplo correcto, pero para este DQL no necesitas parámetros :) – Ocramius

Respuesta

21

No incluyó sus parámetros en la consulta.

$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); 

Ver ejemplos en la documentación: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#dql-select-examples

+0

Sí. Una de las cosas más molestas sobre las declaraciones preparadas de PDO es que tener parámetros adicionales provocará un error. – Cerad

+2

De hecho diría que es algo bueno. Si está pasando más parámetros que marcadores de posición, hizo algo mal y es mejor estar informado al respecto. –

3

gracias a todos por sus esfuerzos, i utilizado de manera diferente con el 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

No lo resolvió de manera diferente sino que usó una forma diferente de crear consultas. Funcionó como usted proporcionó los parámetros para estar obligado (al igual que lo sugerí). –

Cuestiones relacionadas