Por lo tanto, no necesita toda la hinchazón que hay en esa esencia, en su lugar, puede usar las siguientes fórmulas:
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;
}
Esto supone que pasas en la latitude
y longitude
de su usuario. Además, si no desea que el radio sea 1, puede pasar el tercer argumento y proporcionar un radio personalizado.
Y, por supuesto, asumimos que se trata de un modelo de Offer
. Cambie su convención de nomenclatura cuando sea necesario.