直接贴代码
// 数据库字段名 - 纬度
$field_lat = 'latitude';
// 数据库字段名 - 经度
$field_lng = 'longitude';
$distanceSql = "(6378.138 * 2 * asin(sqrt(pow(sin(({$field_lat} * pi() / 180 - {$lat} * pi() / 180) / 2),2) + cos({$field_lat} * pi() / 180) * cos({$lat} * pi() / 180) * pow(sin(({$field_lng} * pi() / 180 - {$lng} * pi() / 180) / 2),2))) * 1000)"; $shop_store = Db::name('store')->where($where) ->field("id,name,province_name,city_name,area_name,address,status, {$distanceSql} as distance") ->where(Db::raw($distanceSql . "<=" . $store_juli)) //获取多少范围之内 // 按距离升序排列(由近到远 ->order("distance {$order}") ->paginate(10);
代码片段解析
获取多少范围之内需要用原生的 ->where(Db::raw($distanceSql . "<=" . ($distance*1000)))
不能用 ->where($distanceSql, "<=" . ($distance*1000))
, 因为长表达式后面的条件不识别
$distance就是查询的多少KM
标签:name,经纬度,几公里,门店,field,180,lat,pi,distanceSql From: https://www.cnblogs.com/lusanqian/p/18196384