2015-08-14 2 views
0

Я пытаюсь создать форму поиска ... Все работает отлично, однако сейчас поиск работает только в том случае, если я ищу конкретный объект, и буквы должны быть идентичны продуктам имя.Symfony2 форма поиска с приблизительными результатами

вид:

$form = $this->createFormBuilder() 
//   ->setAction($this->generateUrl('search')) 
      ->add('search', 'text', array(
       'attr' => array(
        'placeholder' => 'Search for products', 
       ), 
       'label' => false)) 
       ->add('submit', 'submit') 
      ->getForm(); 

     if ('POST' === $request->getMethod()) 
     { 
      $form->handleRequest($request); 
      $data = $form->get('search')->getData(); 
       return $this->redirect($this->generateUrl('searching', array('data' => $data))); 
      } 

Как найти продукты:

$products = $em->getRepository('MpShopBundle:Product')->findProductsBySearch($data); 

    public function findProductsBySearch($data) 
    { 
     $qb = $this->createQueryBuilder('a'); 
     $qb->where('a.model=:model'); 
     $qb->SetParameter('model', $data); 
     return $qb->getQuery()->getResult(); 

    } 

Если я ищу, например, Test1 - продукт найден. Но если я пишу Test - продуктов не будет найдено.

Что я хочу достичь, это найти все продукты, которые имеют строку, указанную в форме.

Например, если у меня есть 3 продукта: Test1, Test2, Test3 ... Если я напечатаю Test и отправлю, я должен найти все эти продукты ... И неважно, если литеры в нижнем или верхнем регистре. Как я могу это сделать в PHP и Symfony?

ответ

1

Вы можете использовать это:

$qb->where('a.model LIKE :model') 
    ->setParameter('model', '%'.$model.'%'); 

Это даст вам все, что содержит ваш $model. Если вам нужны только результаты, начинающиеся с model, вы можете удалить первый%.

Надеюсь, это поможет.

Смежные вопросы