0

私はこのクエリを実行しようとしています:

public function getLakesNearby($minLat, $maxLat, $minLng, $maxLng, $lat, $lng, $limit)
{


    $query = $this->_em->createQuery('  SELECT a 
                                        FROM MycBundle:Lake a
                                        WHERE a.latitude > :minLat AND a.latitude < :maxLat AND a.longitude > :minLng AND a.longitude < :maxLng
                                        ORDER BY ABS(a.latitude - :lat) + ABS(a.longitude - :lng) ASC
                                        LIMIT :limit ');

    $query->setParameters(array('minLat' => $minLat, 'maxLat' => $maxLat, 'minLng' => $minLng, 'maxLng' => $maxLng, 'Lat' => $lat, 'Lng' => $lng, 'limit' => $limit));
    return $query->getResult();
}

これによりエラーが発生します

[構文エラー] 行 0、列 234: エラー: 文字列の末尾が予期されていましたが、'(' を取得しました

Doctrine が orderby で ABS() をサポートしていないことがわかりました。

それを機能させるための解決策を見つけるのを手伝ってください。

ありがとう

4

1 に答える 1

1

これは、QueryBuilder 形式で探しているものです。これは私の思いつきであり、テストできる場所ではないため、これを最初に使用することをお勧めします。

$qb = $this->getEntityManager()->createQueryBuilder();

$qb->select('a');
$qb->from('MycBundle:Lake', 'a');

$qb->where('a.latitude > :minLat');
$qb->andWhere('a.latitude < :maxLat');
$qb->andWhere('a.longitude > :minLng');
$qb->andWhere('a.longitude < :maxLng');

$qb->add('orderBy', $qb->expr()->sum($qb->expr()->abs('a.latitude - :lat'), $qb->expr()->abs('a.longitude - :lng'));

$qb->setParameters(array(
     'minLat' => $minLat,
     'maxLat' => $maxLat,
     'minLng' => $minLng,
     'maxLng' => $maxLng,
     'lat'    => $lat,
     'lng'    => $lng)
);

$qb->setMaxResults($limit);

return $qb->getQuery()->getResult();
于 2013-03-15T21:59:01.057 に答える