Quindi non hai bisogno di tutto il rigonfiamento che c'è in quel succo, invece, puoi usare le seguenti formule:
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;
}
Ciò presuppone che tu superi la latitude
e longitude
dal tuo utente. Inoltre, se non vuoi che il raggio sia 1, puoi passare il 3° argomento e fornire un raggio personalizzato.
E ovviamente, assumiamo che questo sia per un modello di Offer
. Modifica la tua convenzione di denominazione dove richiesto.