'参数号无效:绑定变量数与令牌数不匹配' Symfony的

时间:2015-12-21 15:19:37

标签: symfony doctrine doctrine-query

我正在使用查询构建器处理 symfony项目实体。当我尝试运行此功能时,我遇到了这个问题。

  

参数号无效:绑定变量数与令牌数不匹配

public function json_filterAllproductsAction() {

    $search = "";
    $category = 1;

    //Combine tables and create the query with querybuilder
    $em = $this->container->get('doctrine.orm.entity_manager');

    $qb = $em->createQueryBuilder();

    $qb->select('p')
            ->from('EagleAdminBundle:Products', 'p')
            ->orderBy('p.id', 'DESC');
    if ($category != 0) {
        $qb->where($qb->expr()->in('p.category', '?1'))
                ->setParameter(1, $category);
    }
    $qb->where('p.productTitle LIKE :title')
            ->setParameter('title', "$search%");

    //convert to json using "JMSSerializerBundle"
    $serializer = $this->container->get('serializer');
    $jsonproducts = $serializer->serialize($qb->getQuery()->getResult(), 'json');
    return new Response($jsonproducts);
}

我认为错误在

  

$ qb->其中($ qb-> expr() - > in(' p.category','?1'))                    - > setParameter(1,$ category);

有人可以帮助我,这将是很好的帮助。

1 个答案:

答案 0 :(得分:2)

这里有两个问题。第一个是你的最后一个where子句覆盖了第一个。这可以通过使用andWhere来修复。第二个是您使用位置参数(?1)混合命名参数(:title)。混合是不是没有。而且你真的不需要expr对象。尝试:

$qb->select('product')
  ->from('EagleAdminBundle:Products', 'product')
  ->orderBy('product.id', 'DESC');
if ($category) {
    $qb->andWhere('product.category IN (:category)');
    $qb->setParameter('category', $category);
}
$qb->andWhere('product.productTitle LIKE :title');
$qb->setParameter('title', "$search%");