Ini adalah implementasi saya. Saya telah memilih untuk membuat alias kueri saya sebelumnya, dengan cara ini saya dapat memanfaatkan Pagination . Selanjutnya, Anda perlu secara eksplisit memilih kolom yang ingin Anda ambil dari kueri. tambahkan di ->select() . Seperti users.latitude, users.longitude, products.name , atau apa pun itu.
Saya telah membuat ruang lingkup yang terlihat seperti ini:
public function scopeIsWithinMaxDistance($query, $location, $radius = 25) {
$haversine = "(6371 * acos(cos(radians($location->latitude))
* cos(radians(model.latitude))
* cos(radians(model.longitude)
- radians($location->longitude))
+ sin(radians($location->latitude))
* sin(radians(model.latitude))))";
return $query
->select() //pick the columns you want here.
->selectRaw("{$haversine} AS distance")
->whereRaw("{$haversine} < ?", [$radius]);
}
Anda dapat menerapkan cakupan ini ke model apa pun dengan latitude danlongitude .
Ganti $location->latitude dengan latitude yang ingin Anda cari, dan ganti $location->longitude dengan garis bujur yang ingin Anda telusuri.
Ganti model.latitude dan model.longitude dengan Model yang ingin Anda temukan di sekitar $location berdasarkan jarak yang ditentukan dalam $radius .
Saya tahu Anda memiliki rumus Haversine yang berfungsi, tetapi jika Anda perlu membuat Paginate, Anda tidak dapat menggunakan kode yang Anda berikan.
Semoga membantu.