sql >> Database teknologi >  >> RDS >> Mysql

Haversine og Laravel

Så du behøver ikke al den oppustethed, der er i den essens, i stedet kan du bruge følgende formler:

public function get_offers_near($latitude, $longitude, $radius = 1){

    $offers = Offer::select('offers.*')
        ->selectRaw('( 3959 * acos( cos( radians(?) ) *
                           cos( radians( offer_lat ) )
                           * cos( radians( offer_long ) - radians(?)
                           ) + sin( radians(?) ) *
                           sin( radians( offer_lat ) ) )
                         ) AS distance', [$latitude, $longitude, $latitude])
        ->havingRaw("distance < ?", [$radius])
        ->get();

    return $offers;
}

Dette forudsætter, at du passerer i latitude og longitude fra din bruger. Hvis du ikke ønsker, at radius skal være 1, kan du sende det 3. argument ind og angive en tilpasset radius.

Og selvfølgelig antager vi, at dette er for en model af Offer . Skift din navnekonvention, hvor det er nødvendigt.



  1. MySQL-fejlkode:1305. FUNKTION JSON_EXTRACT findes ikke i MySQL-klientversion:5.5.52

  2. Sådan vælger du flere rækker fra mysql med en forespørgsel og bruger dem i php

  3. Find aktuelle jobåbninger til Oracle Forms &Reports

  4. Introduktion af ny funktion - dødvandsanalyse