我有一个搜索页面,我使用了一个分页器。对于定义的搜索,我没有结果(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查询之间存在差异?
谢谢!