2017-05-16 71 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