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.
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