Unten ist eine Funktion, die ich auf einem Modell habe, das eine Service
mit den Daten aus drei Beziehungen zurückbringt. Der Bereich closeTo
enthält Daten, die sich darauf beziehen, wie weit ein Standort von einem Dienst entfernt ist, den ich auch zurückgeben möchte, aber er verwendet ihn derzeit nur, um Entfernungen zu ermitteln.Zurückgeben von Scope-Daten in einer Sammlung
return Service::with(['relationship1', 'relationship2', 'locations'])
->whereHas('locations', function ($query) use ($latitude, $longitude, $radius){
$query->closeTo($latitude, $longitude, $radius);
})
->get();
die $query->closeTo
verwendet die Funktion unten, und ich mag die Abstandsdaten mit den return
von der ersten Funktion zurück zu senden.
public function scopeCloseTo($query, $latitude, $longitude, $radius = 25)
{
$haversine = "(3959 * acos(cos(radians($latitude))
* cos(radians(latitude))
* cos(radians(longitude)
- radians($longitude))
+ sin(radians($latitude))
* sin(radians(latitude))))";
return $query
->select(['id', 'ccg', 'ccg_code']) //pick the columns you want here.
->selectRaw("{$haversine} AS distance")
->whereRaw("{$haversine} < ?", [$radius]);
}
Was ist der beste Wat, um dies zu erreichen?
ich an anderer Stelle verwendet habe, kreuzte nicht meinen Verstand es so hier zu verwenden, –