Fluid SQL 查询依赖于变量值

Fluid SQL Query dependent on variables values

我需要进行查询,但这不是简单的查询。 我需要根据变量值在查询中 setParameters 。简单代码:

    $repository = $this->getDoctrine()->getRepository(Item::class);

    $query = $repository->createQueryBuilder('b');

    if ($itemId != null) {
        $query->where('b.id = :id')
            ->setParameter('id', $itemId);
    }

    if ($name != "XXX") {
        $query->where('b.name = :name')
            ->setParameter('name', $name);
    }

    $item = $query->getQuery()->getResult();

    return $this->render('default/search/result.html.twig',
        array('item' => $item));

但此代码不正确。有人知道怎么解决吗?

你应该使用 $query->andWhere()

所以在你的情况下:

$repository = $this->getDoctrine()->getRepository(Item::class);

    $query = $repository->createQueryBuilder('b');

if ($itemId != null) {
    $query->where('b.id = :id')
        ->setParameter('id', $itemId);
}

if ($name != "XXX") {
      $query->andWhere('b.name = :name')
        ->setParameter('name', $name);
}

$item = $query->getQuery()->getResult();

return $this->render('default/search/result.html.twig',
    array('item' => $item));

// NOTE: ->andWhere() can be used directly, without any ->where() before

更多信息请看这里:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html