Dit was mijn uitvoering ervan. Ik heb ervoor gekozen om mijn vraag van tevoren te aliasen, op deze manier kan ik profiteren van Pagination
. Verder moet u expliciet de kolommen selecteren die u uit de query wilt halen. voeg ze toe aan de ->select()
. Zoals users.latitude, users.longitude, products.name
, of wat ze ook mogen zijn.
Ik heb een bereik gemaakt dat er ongeveer zo uitziet:
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]);
}
U kunt dit bereik toepassen op elk model met een latitude
enlongitude
.
Vervang de $location->latitude
met uw latitude
waarnaar u wilt zoeken, en vervang de $location->longitude
met de lengtegraad waarop u wilt zoeken.
Vervang de model.latitude
en model.longitude
met de modellen die u wilt vinden rond de $location
gebaseerd op de afstand gedefinieerd in de $radius
.
Ik weet dat je een werkende Haversine-formule hebt, maar als je moet pagineren, kun je de code die je hebt opgegeven niet gebruiken.
Hopelijk helpt dit.