2017-07-18 3 views
0

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?

Antwort

1

Fügen Sie einfach die SchließenZum Anweisung zu Ihrem eifrigen Laden als Verschluss anstelle einer Zeichenfolge:

return Service::with(['relationship1', 'relationship2', 
     'locations' => function ($query) use ($latitude, $longitude, $radius){ 
    $query->closeTo($latitude, $longitude, $radius); 
}])->whereHas('locations', function ($query) use ($latitude, $longitude, $radius){ 
    $query->closeTo($latitude, $longitude, $radius); 
    }) 
->get(); 
+0

ich an anderer Stelle verwendet habe, kreuzte nicht meinen Verstand es so hier zu verwenden, –

Verwandte Themen