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.