Я хочу отфильтровать результаты по множеству взаимосвязей с несколькими флажками.
У меня есть 2 лица. 1) «свойства» 2) «взгляды». Где в свойствах массив массива вида добавляется с множеством полей, основанных на объекте вида.
Теперь я создал форму множественного флажка, основанную на значениях представлений (на данный момент я сделал это вручную). Это проявляется в форме. Однако я не знаю, как отфильтровать результаты по флажкам.
В качестве hmtl formoutput я получаю следующие несколько полей ввода с элементом массива
<input type="checkbox" name="form[viewchoices][]" value=1">
<input type="checkbox" name="form[viewchoices][]" value=2">
<input type="checkbox" name="form[viewchoices][]" value=2">
Я сейчас пытаюсь отфильтровать в контроллере запрос. Сначала получите данные
$views = array();
$views["viewchoices"] = $form["viewchoices"]->getData();
а потом я пытаюсь сделать фильтр
if ($views["viewchoices"]) {
$pagination->innerJoin('a.propviews', 'd')
->addSelect('d');
foreach ($views['viewchoices'] as $view)
{
$pagination->andWhere('d.id like :view')
->setParameter('view', $view);
}
Я отображаю вывод с помощью knp paginator.
Когда я пытаюсь отфильтровать, я получаю сообщение об ошибке «Слишком мало параметров: запрос определяет 5 параметров, но вы ограничиваете только 4». Но я не думаю, что мой код оптимален.
Есть идеи, как это сделать? Заранее спасибо!
обновленный код:
У меня есть несколько полей фильтра. При наличии нескольких флажков другие поля игнорируются.
$pagination = $propertyRepo->createQueryBuilder('a');
$pagination->Where('a.draft = 1')
if($location != NULL) {
$pagination->innerJoin('a.proplocation', 'b')
->addSelect('b')
->andWhere('b.id like :location')
->setParameter('location', $location);
}
if($type != NULL) {
$pagination->innerJoin('a.proptype', 'c')
->addSelect('c')
->andWhere('c.id like :type')
->setParameter('type', $type);
}
if ($views["viewchoices"]) {
$pagination->innerJoin('a.propviews', 'd')
->addSelect('d');
foreach ($views['viewchoices'] as $view['viewchoices'])
{
$pagination->orWhere('d.id =' .(int)$view['viewchoices']);
// ->setParameter('view', $view);
}
}
if ($rooms["roomchoices"]) {
$pagination->innerJoin('a.proprooms', 'e')
->addSelect('e');
foreach ($rooms['roomchoices'] as $room['roomchoices'])
{
$pagination->orWhere('e.id =' .(int)$room['roomchoices']);
// ->setParameter('view', $view);
}
}
$pagination->getQuery();