- Published on
doctrine教程4---andWhere() 和 orWhere()
原创文章,转载时需取得本人同意并注明来源
- Authors
-
-
- Name
- langziyang
-
当我们在主页搜索时,url会添加?q=参数,但是结果不会变。要读取查询参数,控制器首先需要Request对象
use Symfony\Component\HttpFoundation\Request;
public function index(Request $request,CategoryRepository $categoryRepository): Response
{
$searchTerm = $request->query->get('q');
if ($searchTerm) {
$categories = $categoryRepository->search($searchTerm);
} else {
$categories = $categoryRepository->findAllOrdered();
}
return $this->render('fortune/homepage.html.twig',[
'categories' => $categories
]);
}
然后添加search方法
public function search(string $term)
{
return $this->createQueryBuilder('category')
->andWhere('category.name=:searchTerm')
->setParameter('searchTerm', $term)
->getQuery()
->getResult();
}
但是一般情况下搜索是模糊查询,所以我们希望使用Like
public function search(string $term)
{
return $this->createQueryBuilder('category')
->andWhere('category.name LIKE :searchTerm')
->setParameter('searchTerm', '%' . $term . '%')
->getQuery()
->getResult();
}
但是如果我们想同时也搜索iconKey呢?你可能会想用->orWhere(),但是这里你一定要注意不要这样用,相像一下我们有如下需求:
搜索(name或iconKey包含查询)并且active是true的,你可能因为代码顺序的原因导致查询条件混乱,所以请使用下面的方法:
return $this->createQueryBuilder('category')
->andWhere('category.name LIKE :searchTerm OR category.iconKey LIKE :searchTerm')