I'm trying to build a query builder where the user can select multiple filters in Twig and I want them all to be applied on the same entity class. I already tryied to use or and orwhere in the query. Am I making a mistake? Or is there maybe a way to give all fiters the same name, save them as an array and let the query run in a foreach loop?
My attempt with 'OR'
$fachRepository = $em->getRepository(Fach::class);
$allFachQuery = $fachRepository->findByFilter2()->orderBy('fh.h', 'ASC');
if (($request->query->getAlnum('h_filter'))
or($request->query->getAlnum('h_filter2'))
or($request->query->getAlnum('h_filter3'))
){
$allFachQuery
->where('fh.h LIKE :h OR fh.h LIKE :h2 OR fh.h LIKE :h3')
->setParameter('h', '%' . $request->query->getAlnum('h_filter'). '%')
->setParameter('h2', '%' . $request->query->getAlnum('h_filter2'). '%')
->setParameter('h3', '%' . $request->query->getAlnum('h_filter3'). '%');
}
$query = $allFachQuery->getQuery();
My attempt with 'orWhere'
$fachRepository = $em->getRepository(Fach::class);
$allFachQuery = $fachRepository->findByFilter2()->orderBy('fh.h', 'ASC');
if (($request->query->getAlnum('h_filter'))
or($request->query->getAlnum('h_filter2'))
or($request->query->getAlnum('h_filter3'))
){
$allFachQuery
->where('fh.h LIKE :h')
->where('fh.h LIKE :h2')
->where('fh.h LIKE :h3')
->setParameter('h', '%' . $request->query->getAlnum('h_filter'). '%')
->setParameter('h2', '%' . $request->query->getAlnum('h_filter2'). '%')
->setParameter('h3', '%' . $request->query->getAlnum('h_filter3'). '%');
}
$query = $allFachQuery->getQuery();