学说设置查询参数有条件

时间:2015-10-01 15:06:31

标签: php mysql symfony doctrine-orm

我在Symfony 2中构建应用程序 我必须根据表单中传递的数据过滤用户 我在我的控制器中写了这样的东西:

$em = $this->getDoctrine()->getManager();
$qb = $em->createQueryBuilder();
$qb->addSelect('user');
$qb->from('Application\Sonata\UserBundle\Entity\User', 'user');

if(($filter['freelancer'])){
    $qb->setParameters(array('freelancer' => $filter['freelancer']))
    ->andWhere('user.firstname = :freelancer');
}
if(($filter['category'])){
    $qb->innerJoin('Flexihub\MainBundle\Entity\Category', 'category', 'WITH', 'user.category = category.id')
    ->setParameters(array('category' => $filter['category']))
    ->andWhere('user.category = :category');
}
$query = $qb->getQuery();
$result = $query->getResult();
dump($result);

我试图传递两个参数时遇到错误。


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

我做错了什么? 有没有更好的解决方案来解决我的问题?

1 个答案:

答案 0 :(得分:0)

这样编写它是合乎逻辑的,因此,首先添加条件然后提供参数:

if(($filter['freelancer'])){
    $qb
        ->andWhere('user.firstname = :freelancer')
        ->setParameter('freelancer', $filter['freelancer']);
}
if(($filter['category'])){
    $qb
        ->innerJoin('Flexihub\MainBundle\Entity\Category', 'category', 'WITH', 'user.category = category')
        ->andWhere('user.category = :category')
        ->setParameter('category', $filter['category']);
}