my following code is like this:
$places = DivePlace::selectRaw(\"*,(st_distance_sphere( POINT(\".$lon.\",\".$lat.\") , point(lon, lat))/1000) as distance\")
You need to repeat distance definition because for pagination Laravel uses only count(*)
for columns, so it should be:
$places = DivePlace::selectRaw("*,(st_distance_sphere( POINT(".$lon.",".$lat.") , point(lon, lat))/1000) as distance")
->havingRaw("(st_distance_sphere( POINT(".$lon.",".$lat.") , point(lon, lat))/1000) < ".$radius)
->orderBy("distance")
->paginate(10);
You could also use bindings for the query, so better would be:
$places = DivePlace::selectRaw("*,(st_distance_sphere( POINT(?, ?) , point(lon, lat))/1000) as distance",[$lon, $lat])
->havingRaw("(st_distance_sphere( POINT(?, ?) , point(lon, lat))/1000) < ?", [$lon, $lat, $radius])
->orderBy("distance")
->paginate(10);
->where(DB::raw("(ST_Distance_Sphere(POINT(".$lon.",".$lat."), POINT(lon,lat))/1000)"), '<', 200)
instead of ->havingRaw("(st_distance_sphere( POINT(?, ?) , point(lon, lat))/1000) < ?", [$lon, $lat, $radius])