したがって、その要点にあるすべての肥大化は必要ありません。代わりに、次の式を使用できます。
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;
}
これは、latitude
を渡すことを前提としています およびlongitude
ユーザーから。また、半径を1にしたくない場合は、3番目の引数を渡して、カスタム半径を指定できます。
そしてもちろん、これはOffer
のモデル用であると想定しています。 。必要に応じて命名規則を変更してください。