简体   繁体   English

knp分页器返回0个结果,但查询返回5个结果

[英]knp paginator return 0 result but query return 5 results

i try to do a pagination with knp paginator. 我尝试使用knp分页器进行分页。

i use it in other place in the same website, and he work fine. 我在同一网站的其他地方使用它,他工作正常。

But, now i try use it on other query, and i have a problem. 但是,现在我尝试在其他查询上使用它,但是我遇到了问题。

    $query = $src->getQuery();
    //die(print_r($query->getDQL()));
    //die(print_r($query->getParameters()));
    $paginator = $this->get('knp_paginator');
    $paginator = $paginator->paginate(
        $query,
        $this->get('request')->query->get('page', 1),
        15
    );

$src is a custom service for create my query. $ src是用于创建我的查询的自定义服务。 The die line "getDQL" return this DQL : 模具行“ getDQL”返回此DQL:

SELECT p FROM YOUProductBundle:Product p INNER JOIN p.boutique b INNER JOIN p.material m INNER JOIN p.cat1 cat WHERE p.stock > 0 AND p.type = :type AND cat.id = :cat AND b.latitude >= :latN AND b.latitude <= :latP AND b.longitude >= :lonN AND b.longitude <= :lonP AND distance(b.latitude,b.longitude,48.583148,7.747882000000004) <= :rayon ORDER BY m.prix ASC

The die line "getParameters" return this datas : 模具行“ getParameters”返回以下数据:

Doctrine\Common\Collections\ArrayCollection Object
(
[_elements:Doctrine\Common\Collections\ArrayCollection:private] => Array
    (
        [0] => Doctrine\ORM\Query\Parameter Object
            (
                [name:Doctrine\ORM\Query\Parameter:private] => type
                [value:Doctrine\ORM\Query\Parameter:private] => material
                [type:Doctrine\ORM\Query\Parameter:private] => 2
            )

        [1] => Doctrine\ORM\Query\Parameter Object
            (
                [name:Doctrine\ORM\Query\Parameter:private] => cat
                [value:Doctrine\ORM\Query\Parameter:private] => 21
                [type:Doctrine\ORM\Query\Parameter:private] => integer
            )

        [2] => Doctrine\ORM\Query\Parameter Object
            (
                [name:Doctrine\ORM\Query\Parameter:private] => latP
                [value:Doctrine\ORM\Query\Parameter:private] => 49.257639204439
                [type:Doctrine\ORM\Query\Parameter:private] => 2
            )

        [3] => Doctrine\ORM\Query\Parameter Object
            (
                [name:Doctrine\ORM\Query\Parameter:private] => latN
                [value:Doctrine\ORM\Query\Parameter:private] => 47.908656795561
                [type:Doctrine\ORM\Query\Parameter:private] => 2
            )

        [4] => Doctrine\ORM\Query\Parameter Object
            (
                [name:Doctrine\ORM\Query\Parameter:private] => lonP
                [value:Doctrine\ORM\Query\Parameter:private] => 8.7674709750602
                [type:Doctrine\ORM\Query\Parameter:private] => 2
            )

        [5] => Doctrine\ORM\Query\Parameter Object
            (
                [name:Doctrine\ORM\Query\Parameter:private] => lonN
                [value:Doctrine\ORM\Query\Parameter:private] => 6.7282930249398
                [type:Doctrine\ORM\Query\Parameter:private] => 2
            )

        [6] => Doctrine\ORM\Query\Parameter Object
            (
                [name:Doctrine\ORM\Query\Parameter:private] => rayon
                [value:Doctrine\ORM\Query\Parameter:private] => 75
                [type:Doctrine\ORM\Query\Parameter:private] => 2
            )

    )

)

I don't have any error but i have 0 result for this query. 我没有任何错误,但我对此查询有0个结果。 Now, if i try to do "$query->getArrayResult()", i get 5 results ! 现在,如果我尝试执行“ $ query-> getArrayResult()”,则会得到5个结果!

Why the paginator don't get the 5 normal results ? 为什么分页器没有得到5个正常结果?

The order of my parameters is not good ... When i set parameter, i don't set it in good order, see : 我的参数顺序不好...当我设置参数时,我没有按好顺序设置它,请参阅:

            ->andWhere('b.latitude >= :latN')
            ->andWhere('b.latitude <= :latP')
            ->andWhere('b.longitude >= :lonN')
            ->andWhere('b.longitude <= :lonP')
            ->andWhere('distance(b.latitude,b.longitude,'.$datas['lat'].','.$datas['lon'].') <= :rayon')
            ->setParameter('latP',$latP)
            ->setParameter('latN',$latN)
            ->setParameter('lonP',$lonP)
            ->setParameter('lonN',$lonN)
            ->setParameter('rayon',$datas['search']);

I inverse "latP" with "latN", and "lonP" with "lonN". 我将“ latP”与“ latN”反向,将“ lonP”与“ lonN”反向。

It's not a problem when you use the query builder... but when you export your query for Paginator, the final query and parameter array is not in good order, he can't do a correct query .... 当您使用查询生成器时这不是问题...但是当您导出对Paginator的查询时,最终查询和参数数组的顺序不正确,他无法进行正确的查询...。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM