У меня есть несколько URL-запросов, например:
/page?type=train&category=others&location=germany
/page?type=car&category=others
Я выбираю их и помещаю в переменные, по которым хочу фильтровать запросы к базе данных.
Вот что я попробовал:
$item = $this->getDoctrine()
->getRepository('AppBundle:Item')
->findBy(array(
'type' => $type,
'category' => $category,
'location' => $location
));
Но, как вы можете себе представить, если одна или несколько переменных пустые, я не получаю результатов …
Я хочу запросить все элементы из базы данных и отфильтровать их по переменным, как я могу подойти к этому?
Спасибо за вашу помощь! 🙂
Имейте в виду, что вам не нужно создавать findBy-Criteria внутри построителя запросов. Вместо этого вы могли бы создать его прямо раньше с помощью PHP array_filter()
, который удалит все нулевые значения:
$criteria = array_filter(array(
'type' => 'search_type',
'category' => null,
'location' => 'search_location'
));
$item = $this->getDoctrine()
->getRepository('AppBundle:Item')
->findBy($criteria);
Других решений пока нет …