查询构建器 - 根据if语句添加方法

时间:2016-09-25 05:49:53

标签: symfony doctrine

我的查询构建器表示法有问题。我想根据if语句添加其他方法。我像下面一样扭动,但它无法正常工作

$repository->createQueryBuilder('k')
 ->where('k.autor LIKE :autor OR k.tytul LIKE :tytul ');
if($tag!==''){
                  $repository->createQueryBuilder('k')->andWhere('k.cena=:jezyk');
                  $repository->createQueryBuilder('k') ->setParameter('jezyk',$tag);        
              }

$repository->createQueryBuilder('k')->setParameter('autor', '%' . $s . '%');
$repository->createQueryBuilder('k')->setParameter('tytul', '%' . $s . '%');

query=$repository->createQueryBuilder('k')->getQuery();
$searched_books = $query->getResult();

我想我用对象犯了错误。有人可以告诉我吗?提前致谢

1 个答案:

答案 0 :(得分:0)

问题是createQueryBuilder方法将在每次调用时创建一个新的查询构建器。你应该尝试这样的事情:

$qb = $repository->createQueryBuilder('k');
$qb->where('k.autor LIKE :autor OR k.tytul LIKE :tytul');

if ($tag !== '') {
    $qb->andWhere('k.cena = :jezyk');
    $qb->setParameter('jezyk', $tag);        
}

$qb->setParameter('autor', '%' . $s . '%');
$qb->setParameter('tytul', '%' . $s . '%');

$searched_books = $qb->getQuery()->getResult();