php - 在选择子查询中选择 Doctrine 错误

标签 php mysql symfony doctrine-orm doctrine

这就是我的问题: 我试图在带有 Doctrine 的选择中进行子选择,但已经告诉我,我限制的参数太少。 这是我的代码:

 //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 返回的错误:

Too few parameters: the query defines 3 parameters but you only bound 1

我也尝试过使用

->setParameters(....)

到$qb而不是$qb2,但结果是相同的

Too few parameters: the query defines 3 parameters but you only bound 2

最佳答案

我已经用这段代码解决了我的问题:

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

添加了计数参数以使每个 for 循环不同并使用 ? 手动添加参数。 $计数

关于php - 在选择子查询中选择 Doctrine 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44010388/

相关文章:

php - Doctrine2/PostgreSQL - 具有可空关系的选择错误

php - 连接查询中的 mysql 语法错误

php - 仅执行多个 PDO 查询中的第一个?

c# - 使用MySQL中的存储过程删除数据

php - 使用 OptionsResolver 组件进行高级类型验证

php - Symfony: fatal error :找不到类 'PHPUnit_Framework_TestCase'

mysql - 将多个 SELECT 规则转换为单个 DQL 查询

javascript - 使用Vue Axios和FusionCharts在Laravel中填充图表数据

php - 从 WP_Query 中排除特定条款

php - 是否可以找出mysql表中哪个字段匹配?