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.