2016-06-30 4 views
0

Ein Mitarbeiter hat viele Mitarbeiterbereiche, ich muss überprüfen, welche Mitarbeiter Mitarbeiterbereiche innerhalb von 12km von beliebigen Punkten in der $ latLngCol-Sammlung haben .Ist es möglich, Query Builder-Ergebnisse in einen Funktionsaufruf innerhalb eines eloquent Query Builder-Kontexts zu projizieren?

Ich muss wissen, ob ich versuche, etwas zu tun, was mit eloquent oder wenn ich DB Raw Abfragen und gespeicherten Prozeduren/MySQL-Funktionen betrachten sollte.

Wie Sie sehen können, rufe ich eine Funktion LatLngToLatLng() auf und versuche, die Ergebnisse einer Abfrage dorthin zu leiten.

$employees = Employee::whereHas('employeeareas',function($query) use($latLngCol) { 

    $query->where(function($ca) use($latLngCol) { 

     $latLngCol->first(function($key, $val) use($ca) { 

      $m = DistanceCalculator::LatLngToLatLng($val['lat'],$val['lng'],$ca->select('latitude')->first(), $ca->select('longitude')->first()); 

      if($m <= 12000) return true; 


     }); 

    } 

    )->first(); 
}); 

In .NET mit Framework Entity es würde wie folgt aussehen:

var employees = 
employee.where(e => e.employeeareas 
.first(ea => LatLngList 
.first(p => calculateDistance(ea.lat, ea.lng, p.lat, p.lng)) 
)).toList; 

Ich muss wissen, wenn ich etwas ähnliches mit eloquent schreiben kann, ohne auf RAW-Abfragen zu müssen.

+0

Da Sie die Entfernung basierend auf dem Lat und Lang berechnen müssen, können Sie alle Ergebnisse ziehen und die Methode ** filter() ** für die Sammlung verwenden, um die Datensätze basierend auf der berechneten Entfernung zu entfernen https: //laravel.com/docs/5.2/collections#method-filter – TheFallen

Antwort

0

Sie können nicht wie .net mit eloquent schreiben.

aber Laravel bieten Sammelklasse. Sie können die Filtermethode in der Auflistung verwenden, um die Auflistung durch den angegebenen Rückruf zu filtern.

Beispiel wenn Sie eine Sammlung mit dem Namen $collection dann können Sie es Filter mit einer Funktion wie diese

$filtered = $collection->filter(function ($value, $key) { 
    return $value > 2; 
}); 

$filtered->all(); 

seit Ihrer Anfrage komplex es besser ist, den Weg für die Nutzung von code.it chaotisch wäre, wenn Sie Sammlung für Ihr Problem

Verwandte Themen