我在数据库中查找城市,当我键入“ Aulnay-sous-bois”时,没问题,我可以找到有问题的城市,但是当我键入“ Aulnay sous bois”时,它不起作用!
我已经尝试删除字符,但是不起作用
我的代码控制器:
public function verifyCity(Request $request, CityRepository $cityRepository): JsonResponse
{
if($request->isXmlHttpRequest()) {
$data = [];
$searchs = $cityRepository->findBySearchCity($request->request->get('city'));
/**
* @var $searchs City[]
*/
foreach ($searchs as $search) {
$data[] = [
'name' => $search->getName(),
'zipCode' => $search->getZipCode()
];
}
return new JsonResponse(['city' => $data, 'ok' => 1]);
}
return new JsonResponse(['error' => 'not found']);
}
我的存储库
public function findBySearchCity($search,$zipCode = null)
{ //SELECT * FROM `city` WHERE name LIKE "%la courn%" OR zip_code LIKE "78%"
$query =$this->createQueryBuilder("c")
->where('c.name LIKE :search')
->setParameter('search', "%".$search."%");
if($zipCode != null) {
$query->orWhere('c.zipCode LIKE :zipCode')
->setParameter('zipCode', $zipCode."%");
}
return $query->getQuery()->setMaxResults(5)
->getResult();
}
和Js:
var cityTabs = [];
$('#registration_form_city').keyup(function () {
var city = this.value;
var data = {
city: city,
};
$.ajax({
url: $('#wizardProperty').attr('data-verify-city'),
type: 'POST',
data: data,
dataType: 'JSON',
success: function (data) {
cityTabs = [];
if(data.ok == 1) {
$.each(data.city,function (k, v) {
cityTabs.push(v.name);
});
}
console.log(cityTabs);
$( "#registration_form_city" ).autocomplete({
source: cityTabs
});
},
error: function (data) {
console.log(data)
}
});
});
如上所述,当我完全用破折号键入时,它可以工作,但是当我不使用破折号键入时,它不再起作用,如何在删除“-”的同时显示结果
您可以在存储库方法中修改$search
参数值,以使用%
和preg_split()
将破折号和空格替换为implode()
通配符。
public function findBySearchCity($search,$zipCode = null)
{ //SELECT * FROM `city` WHERE name LIKE "%la%courn%" OR zip_code LIKE "78%"
$search = preg_split("/[\s,-]+/", $search);
$search = implode("%", $search);
$query =$this->createQueryBuilder("c")
->where('c.name LIKE :search')
->setParameter('search', "%".$search."%");
if($zipCode != null) {
$query->orWhere('c.zipCode LIKE :zipCode')
->setParameter('zipCode', $zipCode."%");
}
return $query->getQuery()->setMaxResults(5)
->getResult();
}
因此,您的术语“ Aulnay-sous-bois”或“ Aulnay sous bois”都将导致使用以下查询:... LIKE '%Aulnay%sous%bois%'
我将使用MySQL's Full-Text Search功能为您提供其他选择。让我们开始准备表格:
ALTER TABLE city ADD FULLTEXT (`name`);