删除带有学义的特殊字符

问题描述 投票:0回答:2

我在数据库中查找城市,当我键入“ 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)
            }
        });
    });

如上所述,当我完全用破折号键入时,它可以工作,但是当我不使用破折号键入时,它不再起作用,如何在删除“-”的同时显示结果

php sql symfony doctrine
2个回答
0
投票

您可以在存储库方法中修改$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%'


0
投票

我将使用MySQL's Full-Text Search功能为您提供其他选择。让我们开始准备表格:

ALTER TABLE city ADD FULLTEXT (`name`);
© www.soinside.com 2019 - 2024. All rights reserved.