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
我需要进行查询,但这不是简单的查询。
我需要根据变量值在查询中 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