symfony-querybuilder返回最近的数据

fjnneemd  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(270)

我写了一个查询。
我的数据库里有一个字段 gps_location: string in format: 41.22,42,33.. 我的feed应该返回该位置附近的数据(比如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;

}

有什么想法吗?

6qftjkof

6qftjkof1#

我创建了这个存储库方法来选择一个“location”实体,该实体位于另一个“location”实体的某个半径内。也许你可以根据自己的需要修改一下。

/**
 * 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()
        ;
}

相关问题