2017-06-12 10 views
1

少し助けが必要です。 symfonyで検索バーを実装しようとしています。この検索バーはデータベースにあります。私は何ができるのですが、問題は私が絶対にその人物がその名前に対応するのを見つけるために完全な名前をつける必要があるということです。私が入力した名前の先頭からすべての人を検索できるようにしたいということを除いて。例えば: Iが "ダビング" と入力し、私が見つける: "デュボア"、 "Dubost"、 "Dubububu"、....名前の始まりでDBの研究symfony

public function searchAction (Request $request) 
{ 
    $defaultData = array('search' => 'Type your search here'); 
    $form = $this->createFormBuilder() 
     ->add('search', TextType::class, array('label'=>'Surname ?','required'=>true)) 
     ->add('send', SubmitType::class) 
     ->getForm(); 


    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 
     $data = $form->getData(); 
      $repository = $this 
        ->getDoctrine() 
        ->getManager() 
        ->getRepository('PegasusWebBundle:Clients') 
       ; 

       //$clients = $repository->findBySurname($form->get('search')->getData()); // Method 1 
       $clients = $repository->myFindname($form->get('search')->getData()); // Method 2 with Repository 
       return $this->render('PegasusWebBundle:Default:searchresult.html.twig',array(
       'clients'=> $clients)); 
      } 
    else 

    return $this->render('PegasusWebBundle:Default:search.html.twig', array(
     'form' => $form->createView(), 
    )); 
} 

方法のリポジトリ2

`クラスClientsRepositoryが延びます\教義\ ORM \ EntityRepository {

 public function myFindname($name) 
    { 
    // Method 2 
    $qb = $this->createQueryBuilder('a'); 
    $qb->where(
    $qb->expr()->like('a.surname' ,':surname')) 
     ->setParameter('surname', $name); 

    return $qb 
     ->getQuery() 
     ->getResult(); 
    } 

} `

答えて

0

wildcharなどを追加してみてください:

$query = $repo->createQueryBuilder('a') 
      ->where('a.surname LIKE :surname') 
      ->setParameter('surname', '%'.$name.'%') 
      ->getQuery(); 
0

試行姓値後SQLワイルドカード文字(%)を加えます。

参考文献としてthisを参照してください。

関連する問題