Php 选择子查询中的条令错误选择
这就是我的问题: 我试图在使用原则的选择中进行子选择,但已经告诉我,我限制的参数太少了。 这是我的密码:Php 选择子查询中的条令错误选择,php,mysql,symfony,doctrine-orm,doctrine,Php,Mysql,Symfony,Doctrine Orm,Doctrine,这就是我的问题: 我试图在使用原则的选择中进行子选择,但已经告诉我,我限制的参数太少了。 这是我的密码: //eseguo un group by per capire quali diciture mostrare nel select $repoMappatura = $this->getDoctrine()->getRepository('AppBundle:CombinazioneAlberoMappaCategorieArticoli');
//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个
我还尝试使用
->设置参数(…)
到$qb和不到$qb2,但结果相同
参数太少:查询定义了3个参数,但只绑定了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();
添加了count参数以使每个for循环不同,并使用?手动添加参数$计数