简体   繁体   中英

Doctrine- setting query parameters conditionally

I building application in Symfony 2.
I have to filter users basing on data passed in form.
I wrote something like this in my controller:

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

Im stuck with error when im trying to pass both parameters.


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

What am I doing wrong? Is there better solution to solve my problem?

It's logical to write it like this, so, first add criteria then provide arguments:

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']);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM