paginator和Symfony Profiler查询之间的区别

时间:2018-01-30 17:43:16

标签: php symfony pagination symfony-3.3

我有一个搜索页面,我使用了一个分页器。对于定义的搜索,我没有结果(paginator-> count = 0)但通常我必须有一些(用于此搜索)。所以,我查看了Symfony分析器,看看查询是什么,并在phpmyadmin中运行它,看看是什么问题。 但是,当我从Symfony探查器(“runnable query”)运行查询时,我确实在phpmyadmin中有结果。

这是回购方法:

public function findPaginated(Recherche $recherche = null)
    {
        if ($recherche != null)
        {
            $keywords = $recherche->getRecherche();
            $lieu = $recherche->getLieu();
            $categorie = $recherche->getCategorie();
            $max_results = $recherche->getNbResultats();
            $page = $recherche->getPage();
        }

        $queryString = 'SELECT a, c, u, au, aua, aa, p 
                        FROM AnnoncesBundle\Entity\Annonce a 
                        LEFT JOIN a.categorie c 
                        LEFT JOIN a.user u 
                        LEFT JOIN a.anonymousUser au 
                        LEFT JOIN au.adresse aua
                        LEFT JOIN u.adresse aa
                        LEFT JOIN a.photos p
                        WHERE 1=1';
        if ($categorie != null)
        {
            $queryString .= " AND a.categorie=:cat OR c.parent=:cat";
        }
        if ($keywords != null)
        {
            $queryString .= " AND MATCH (texte, titre) AGAINST (:keyword)";
        }
        if ($lieu != null && $lieu->getLieu() != null)
        {
            if ($lieu->getType() == 'region')
            {
                $queryString .= ' AND aua.postal LIKE ":departement%" OR aa.postal LIKE ":departement%" ';
            }
            else
            {
                if ($lieu->isLieuExact())
                {
                    if ($lieu->getType() == 'postcode')
                    {
                        $queryString .= " AND (aua.postal = :lieu OR aa.postal = :lieu) ";
                    }
                    elseif ($lieu->getType() == 'place')
                    {
                        $queryString .= " AND (aua.ville = :lieu OR aa.ville = :lieu) ";
                    }
                }
                else
                {
                    $queryString .= " AND ((aua.lat >= :lat1 AND aua.lat <= :lat2 AND aua.lng >= :lng1 AND aua.lng <= :lng2) OR (aa.lat >= :lat1 AND aa.lat <= :lat2 AND aa.lng >= :lng1 AND aa.lng <= :lng2))";
                }
            }
        }

        $queryString .= " ORDER BY a.dateModification DESC";

        $query = $this->getEntityManager()
            ->createQuery($queryString)
            ->setFirstResult(($page - 1) * $max_results)
            ->setMaxResults($max_results);

        if ($categorie != null)
        {
            $query->setParameter('cat', $categorie);
        }
        if ($keywords != null)
        {
            $query->setParameter('keyword', $keywords);
        }
        if ($lieu != null && $lieu->getLieu() != null)
        {
            if ($lieu->getType() == 'region')
            {
                $query->setParameter('departement', $lieu->getDepartement());
            }
            else
            {
                if ($lieu->isLieuExact())
                {
                    $query->setParameter('lieu', $lieu->getLieu());
                }
                else
                {
                    $bbox = $lieu->getBbox();
                    $query->setParameter('lng1', $bbox[0] - (1 / 77 * $lieu->getDistance()));
                    $query->setParameter('lat1', $bbox[1] - (1 / 111 * $lieu->getDistance()));
                    $query->setParameter('lng2',$bbox[2] + (1 / 77 * $lieu->getDistance()));
                    $query->setParameter('lat2', $bbox[3] + (1 / 111 * $lieu->getDistance()));
                }
            }
        }


        $pag = new Paginator($query);
        return $pag;
    }

重要的是要知道,对于其他一些值,我的搜索获得的结果与分析器查询相同,但不能使用此指定值(也可能使用其他值...)

我知道为什么我的paginator结果与Symfony profiler查询之间存在差异?

谢谢!

0 个答案:

没有答案