Php Symfony-查询生成器返回最近的数据

Php Symfony-查询生成器返回最近的数据,php,mysql,function,symfony,Php,Mysql,Function,Symfony,我写了一个问题 在我的数据库中,我有一个字段 gps\u位置:字符串格式:41.22,42,33.. 我的提要应该返回该位置附近的数据(比如50公里) 我试过这个 public function getDataNearby() { $near = 50; $query = $this->getDataRepository() ->createQueryBuilder('s') ->select('s') ->

我写了一个问题

在我的数据库中,我有一个字段

gps\u位置:字符串格式: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;

}
公共函数getDataNearnear()
{
$near=50;
$query=$this->getDataRepository()
->createQueryBuilder('s')
->选择('s')
->其中('s.gpsLocation:near')
->setParameter('near',$near)
//->订购人(“abs(s.id)”,“ASC”)
//->setMaxResults(1)
->getQuery();
返回$query;
}

有什么想法吗?

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

/**
 * 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()
        ;
}
/**
*在另一个位置周围的半径内找到一个位置
*
*@param float$lat lat lation
*@param float$lng longtude
*
*@param int$km
*
*@return数组
*@querysultexception
*/
公共功能findNear(浮动$lat,浮动$lng,整数$km=1)
{
$qb=$this->createQueryBuilder('loc');
返回
$qb
->选择('loc')
->地址选择(
"(6371*acos(cos)(弧度)("$lat")"。
“*cos(弧度(位置纬度))”。
“*cos(弧度(位置lng)”。
“-弧度(“.$lng”)”。
“+sin(弧度('.$lat.'))”。
“*sin(弧度(loc.lat)))作为距离”
)
->有('dist<:distance')
->设置参数(‘距离’,$km)
->订购人('dist','ASC')
->getQuery()
->getOneOrNullResult()
;
}

我想你需要一些谷歌搜索