通过名称 symfony 的开头在数据库中进行研究

research in the DB by the start of the name symfony

我需要一点帮助。我正在尝试使用 symfony 实现一个搜索栏,这个搜索栏在数据库中。我能做什么,但问题是我绝对必须输入全名才能找到与该姓名对应的人。除了我希望能够检索所有以我输入的名字开头的人。例如 : 我输入 "dub" 并找到:"Dubois"、"Dubost"、"Dubububu"、....

 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 的存储库

`class ClientsRepository 扩展 \Doctrine\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();
    }

}`

尝试在姓氏值后添加 SQL 通配符 (%)。

另见 this 作为参考。

尝试添加通配符,例如:

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