通过名称 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();
我需要一点帮助。我正在尝试使用 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();