Symfony - построитель запросов возвращает самые близкие данные - PullRequest
0 голосов
/ 13 июня 2018

Я написал запрос.

В моей базе данных есть поле

gps_location: string in format: 41.22,42,33..

Мой фид должен возвращать данные вблизи этих мест (например, 50 км).

Я пробовал это.

public function getDataNearby()
{
    $near = 50;

    $query = $this->getDataRepository()
        ->createQueryBuilder('s')
        ->select('s')
        ->where('s.gpsLocation <= :near')
        ->andWhere('s.gpsLocation > :near')
        ->setParameter('near', $near)
        //->orderBy("abs(s.id)","ASC")
       // ->setMaxResults(1)
        ->getQuery();

    return $query;

}

Есть идеи?

1 Ответ

0 голосов
/ 13 июня 2018

Я создал этот метод репозитория, чтобы выбрать сущность «Местоположение», которая находится в определенном радиусе другой сущности «Местоположение».Может быть, вы можете изменить его в соответствии со своими потребностями.

/**
 * Find a location in a radius around another location
 *
 * @param  float $lat latitude
 * @param  float $lng longtitude
 *
 * @param int $km
 *
 * @return array
 * @throws NonUniqueResultException
 */
public function findNear( float $lat, float $lng, int $km = 1 )
{
    $qb = $this->createQueryBuilder( 'loc' );

    return
        $qb
            ->select( 'loc' )
            ->addSelect(
                '( 6371 * acos(cos(radians(' . $lat . '))' .
                '* cos( radians( loc.lat ) )' .
                '* cos( radians( loc.lng )' .
                '- radians(' . $lng . ') )' .
                '+ sin( radians(' . $lat . ') )' .
                '* sin( radians( loc.lat ) ) ) ) as dist'
            )
            ->having( 'dist < :distance' )
            ->setParameter( 'distance', $km )
            ->orderBy( 'dist', 'ASC' )
            ->getQuery()
            ->getOneOrNullResult()
        ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...