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()
;
}
我想你需要一些谷歌搜索