如何在教义2中使用WHERE

如何在教义2中使用WHERE

我有以下代码给我错误:

Message: Invalid parameter number: number of bound variables does not match number of tokens

代码:
public function getCount($ids, $outcome)
{
    if (!is_array($ids)) {
        $ids = array($ids);
    }
    $qb = $this->getEntityManager()->createQueryBuilder();
    $qb->add('select', $qb->expr()->count('r.id'))
       ->add('from', '\My\Entity\Rating r');
    if ($outcome === 'wins') {
        $qb->add('where', $qb->expr()->in('r.winner', array('?1')));
    }
    if ($outcome === 'fails') {
        $qb->add('where', $qb->expr()->in('r.loser', array('?1')));
    }
    $qb->setParameter(1, $ids);
    $query = $qb->getQuery();
    //die('q = ' . $qb);
    return $query->getSingleScalarResult();
}

数据(或$ ids):
Array
(
    [0] => 566
    [1] => 569
    [2] => 571
)

DQL结果:
q = SELECT COUNT(r.id) FROM \My\Entity\Rating r WHERE r.winner IN('?1')

最佳答案

在研究此问题时,我发现了一些对于遇到相同问题并寻求解决方案的人来说很重要的事情。

在原始帖子中,以下代码行:

$qb->add('where', $qb->expr()->in('r.winner', array('?1')));

将命名参数包装为数组会导致绑定(bind)参数编号问题。通过将其从数组包装中移除:
$qb->add('where', $qb->expr()->in('r.winner', '?1'));

此问题应得到解决。在以前的Doctrine版本中,这可能是个问题,但在最新版本的2.0中已解决。

关于php - 如何在教义2中使用WHERE IN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5929036/

10-11 14:47