Laravel Sorting user collection based by distance


New Member
public function nearby()
    $user = auth()->user();

    $lat = auth()->user()->latitude;
    $lon = auth()->user()->longitude;
    $radius = 3; // km => converted to meter

    $angle_radius = (float)$radius / ( 111 * cos( (float)$lat ) ); // Every lat|lon degree° is ~ 111Km
    $min_lat = (float)$lat - (float)$angle_radius;
    $max_lat = (float)$lat + (float)$angle_radius;
    $min_lon = (float)$lon - (float)$angle_radius;
    $max_lon = (float)$lon + (float)$angle_radius;

    $persons = User::where('status', STATUS::ACTIVE)
                ->where('id', '!=', $user->id)
                ->whereBetween('latitude', [$min_lat, $max_lat])
                ->whereBetween('longitude', [$min_lon, $max_lon])

    $persons->each(function($person) {
        /* auth user coordinate vs user's coordinates */
        $point1 = array('lat' => auth()->user()->latitude, 'long' => auth()->user()->longitude);
        $point2 = array('lat' => $person->latitude, 'long' => $person->longitude);
        $distance = $person->getDistanceBetweenPoints($point1['lat'], $point1['long'], $point2['lat'], $point2['long']);

        $person['distance'] = $distance;

    return $persons;

I'm searching users within the 3km radius based on user's long/lat. I'm comparing auth long/lat to nearby user long/lat. It returns collections of user with distance.


Now I am having trouble sorting it by distance.
If I add orderBy('distance', 'desc') of course it will result an error, because I do not have distance column on my DB.
Is their a way to sort it and paginate it.

Từ khóa phổ biến

You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an alternative browser.