2017-05-16 70 views
0

这就是我的问题: 我试图做一个选择与教条的子选择,但已经告诉我,我有限的参数太少。 这是我的代码:学说错误select select子查询

//eseguo un group by per capire quali diciture mostrare nel select 
      $repoMappatura = $this->getDoctrine()->getRepository('AppBundle:CombinazioneAlberoMappaCategorieArticoli'); 
      $qb = $repoMappatura->createQueryBuilder('combinazioneAlberoMappaCategorieArticoli') 
       ->leftJoin('combinazioneAlberoMappaCategorieArticoli.albero', 'albero') 
       ->select('combinazioneAlberoMappaCategorieArticoli.valore') 
       ->where('combinazioneAlberoMappaCategorieArticoli.albero = :albe') 
       ->setParameter('albe', $alberoFiglio); 
      $count = 894; 
      /** @var $vincolo VincoliControlloAlberiFigliConfiguratore[]*/ 
      foreach ($alberoFiglio->getVincoli() as $vincolo) 
      { 
       if (key_exists($vincolo->getAlberoVincolo()->getId(), $arrayChiaviVincoli)) { 
        $log->info('Esistente in array! Valore: ' . $arrayChiaviVincoli[$vincolo->getAlberoVincolo()->getId()]); 
        $qb2 = $repoMappatura->createQueryBuilder('qb2Mappa'); 
        $qb = $qb->andWhere(
         $qb->expr()->in('combinazioneAlberoMappaCategorieArticoli.id', 
          $qb2->select('qb2Mappa.id') 
           ->where('qb2Mappa.valore = :val' . $count) 
           ->andWhere('qb2Mappa.albero = :alb') 
           ->setParameters(['val' . $count => $arrayChiaviVincoli[$vincolo->getAlberoVincolo()->getId()], 'alb' . $count => $alberoFiglio]) 
          ->getDQL() 
         ) 
        ); 
        $count++; 
       } 
      } 
      $qb = $qb->groupBy('combinazioneAlberoMappaCategorieArticoli.valore') 
       ->getQuery()->getArrayResult(); 

由symfony中返回的错误:

太少参数:查询定义了3个参数,但你只绑定1

我也曾尝试使用

- > setParameters(....)

至$ QB,而不是$ QB2,但结果是一样的

太少参数:查询定义了3个参数,但你只绑定2

回答

0

我已经解决了我的问题与此代码:

$repoMappatura = $this->getDoctrine()->getRepository('AppBundle:CombinazioneAlberoMappaCategorieArticoli'); 
      $qb = $repoMappatura->createQueryBuilder('combinazioneAlberoMappaCategorieArticoli') 
       ->leftJoin('combinazioneAlberoMappaCategorieArticoli.albero', 'albero') 
       ->leftJoin('combinazioneAlberoMappaCategorieArticoli.mappaCategorieArticoli', 'mappaCategorieArticoli') 
       ->select('combinazioneAlberoMappaCategorieArticoli.valore') 
       ->where('combinazioneAlberoMappaCategorieArticoli.albero = ?1') 
       ->setParameter(1, $alberoFiglio); 
      $count = 2; 
      /** @var $vincolo VincoliControlloAlberiFigliConfiguratore*/ 
      foreach ($alberoFiglio->getVincoli() as $vincolo) 
      { 
       if (key_exists($vincolo->getAlberoVincolo()->getId(), $arrayChiaviVincoli)) { 
        $log->info('Esistente in array! Valore: ' . $arrayChiaviVincoli[$vincolo->getAlberoVincolo()->getId()]); 
        $qb2 = $this->getDoctrine()->getRepository('AppBundle:CombinazioneAlberoMappaCategorieArticoli')->createQueryBuilder('qb2Mappa'.$count) 
         ->leftJoin('qb2Mappa'.$count.'.albero', 'alber'.$count) 
         ->leftJoin('qb2Mappa'.$count.'.mappaCategorieArticoli', 'mpc'.$count) 
         ->select('mpc'.$count.'.id') 
         ->where('qb2Mappa'.$count.'.valore = ?' . $count) 
         ->andWhere('alber'.$count.'.id = ?' . ($count + 1)); 

        $qb = $qb->andWhere(
         $qb->expr()->in('mappaCategorieArticoli.id',$qb2->getDQL()) 
        )->setParameter($count, $arrayChiaviVincoli[$vincolo->getAlberoVincolo()->getId()]) 
         ->setParameter($count + 1, $vincolo->getAlberoVincolo()->getId()); 
       } 
       $count = $count + 2; 
      } 
      $log->info($qb->getQuery()->getSQL()); 
      $log->info(count($qb->getParameters())); 
      $qb = $qb->groupBy('combinazioneAlberoMappaCategorieArticoli.valore') 
       ->getQuery()->getArrayResult(); 

添加计数参数,使每个循环不同,并添加手动参数与? 。 $ count