使用查询构建器symfony 2的Like语句不会选择所有字符串

问题描述

所以我有一个包含以下代码的objectRepository:

 public function searchObjects($data,$page = 0,$max = NULL,$em,$baseUrl,$locale)
{
    try {
        $lastDate = new \DateTime('last day of this month');
        $lastDate = $lastDate->format('Y-m-d') . ' 23:59:59';

        $query = isset($data['query']) && $data['query'] ? $data['query'] : null; null;

        $qb = $this->_em->getRepository('AuditConfigBundle:Objects')->createqueryBuilder('o');
        $qb->addSelect("o.id,o.objectCode,o.objectName,o.objectType,o.objectAdresse,o.objectTown")
            ->addSelect("o.objectPostalCode,o.objectNSEE,o.objectNbOutlet,o.objectETR,o.objectLOT")
            ->addSelect("o.objectGeom,o.objectGrouping1,o.objectGrouping2,o.objectStatus,o.objectTypeSupport")
            ->addSelect("o.objectTypePropertySupport,o.objectInfo");
        if ($query) {
            $qb->andWhere('o.objectCode like :objectCode')
                ->setParameter('objectCode',"%" . $query . "%")
                ->orWhere('o.objectName like :objectName')
                ->setParameter('objectName',"%" . $query . "%")
                ->orWhere('o.objectType like :objectType')
                ->setParameter('objectType',"%" . $query . "%")
                ->orWhere('o.objectTown like :objectTown')
                ->setParameter('objectTown',"%" . $query . "%")
                ->orWhere('o.objectPostalCode like :objectPostalCode')
                ->setParameter('objectPostalCode',"%" . $query . "%")
                ->orWhere('o.objectLOT like :objectLOT')
                ->setParameter('objectLOT',"%" . $query . "%")
                ->orWhere('o.objectETR like :objectETR')
                ->setParameter('objectETR',"%" . $query . "%")
                ->orWhere('o.objectGrouping1 like :objectGrouping1')
                ->setParameter('objectGrouping1',"%" . $query . "%")
                ->orWhere('o.objectGrouping2 like :objectGrouping2')
                ->setParameter('objectGrouping2',"%" . $query . "%");
        }
        if ($max) {
            $preparedQuery = $qb->orderBy('o.id','DESC')->getQuery()
                ->setMaxResults($max)
                ->setFirstResult($page * $max);
        } else {
            $preparedQuery = $qb->orderBy('o.id','DESC')->getQuery();
        }

        $result = $preparedQuery->getArrayResult();
        $countData = count($result);

        return $this->transformArrayObject($result,$locale);

    } catch (Exception $e) {
        return [];
    }
}

这是我的控制器代码

    public function paginateAction(Request $request)

{
    $str = fopen('log.txt',"w");
    $em = $this->getDoctrine()->getManager();
    $objectRepository = $em->getRepository('AuditConfigBundle:Objects');

    $locale = $request->getLocale();
    $baseUrl = $request->getSchemeAndHttpHost() . $request->getBaseUrl();
    $page = $request->get('page');
    $currentPage = $page ? (int)$page : 1;
    $query = $request->get('query');
    fwrite($str,"query" . $query . PHP_EOL);
    $perPage = $request->get('perpage');
    $perPage = $perPage ? $perPage : 10;
    $offset = ($perPage * $currentPage) - $perPage + 1;
    $search = $request->get('search');
    $order = $request->get('order');
    $baseUrl = $request->getSchemeAndHttpHost() . $request->getBaseUrl();
    $filters = [
        'query' => $query,//            'order' => $order,];
        $draw = $request->get('draw');
        /**
         * @var ObjectManager $objectmanager
         */
        $objectmanager = $this->get('audittab.manager.object');
        $data = $objectmanager->searchObjects($filters,$currentPage,$perPage,$locale,$baseUrl);
        $objectCount = $objectmanager->getNb();
        $pages = ceil($objectCount / $perPage);
        if ($currentPage > $pages) {
            $currentPage = 1;
        }
        /**
         * @var ObjectManager $objectmanager
         */
    $output = [
        'draw' => intval($draw),'currentPage' => $currentPage,'pages' => $pages,'perPage' => $perPage,'data' => $data,'datacount' => $objectCount,//            'datacount' => $objectmanager->searchObjects($filters,$baseUrl)['count'],'offset' => $offset,];

    return new JsonResponse($output);

}

然后我在ajax中使用此函数调用api控制器

     function getData(page,perpage) {
        $.ajax({
            url: "{{ path('object_paginates') }}?page=" + page + "&perpage=" + perpage,type: 'POST',dataType: 'json',delay: 250,data:{
                query: $('.search').val().toLocaleLowerCase(),},success: function (data) {
                currpage = page
                elmntsperpage = perpage
                nbrPages = data.pages
                datacount = data.datacount

                fillTable(data.data,perpage)
                setPagination(page,data.pages)
                var startelement = parseInt(data.offset)
                var endelement = parseInt(data.offset) + parseInt(elmntsperpage) - 1
                var endelement = endelement > data.datacount ? data.datacount : endelement

                document.getElementById('sample-table-2_info').innerText = 'Showing ' + startelement + ' to ' + endelement + ' of ' + data.datacount + ' entries'
                $(".disabled").removeAttr("onclick");

                console.log(data)
                console.log(datacount)

            }
        })
    }

在名为search的类的搜索字段中,我使用此功能

 $(".search").on("keyup",function () {
        var perpage = $('#records').children("option:selected").val()
        getData(1,perpage)
                // var value = $(this).val().toLowerCase();
                // $("#sample-table-2 tr:gt(0)").filter(function () {
                //     $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
                // });
            });

这里的问题是搜索结果无法正常工作,它仅返回前5个字符,但不能使用超过5个字符 请帮忙

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)