Dus je hebt niet alle opgeblazen gevoel in die kern nodig, in plaats daarvan kun je de volgende formules gebruiken:
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;
}
Hierbij wordt ervan uitgegaan dat u de latitude
. passeert en longitude
van uw gebruiker. Als u niet wilt dat de straal 1 is, kunt u het derde argument doorgeven en een aangepaste straal opgeven.
En natuurlijk gaan we ervan uit dat dit voor een model van Offer
. is . Wijzig waar nodig uw naamgevingsconventie.