员工有很多员工区域,我需要检查哪些员工的员工区域在$ latLngCol集合中任何点的12公里范围内。
我需要知道我是否正在尝试用雄辩的方式做一些事情,或者我是否应该查看数据库原始查询和存储过程/ MySQL函数。
正如您所看到的,我正在调用函数LatLngToLatLng()并尝试将查询结果传递/投影到其中。
$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();
});
在.NET中,使用Entity框架,它看起来像这样:
var employees =
employee.where(e => e.employeeareas
.first(ea => LatLngList
.first(p => calculateDistance(ea.lat, ea.lng, p.lat, p.lng))
)).toList;
我需要知道我是否可以用雄辩的方式写一些类似的东西,而不必诉诸RAW查询。
答案 0 :(得分:0)
你不能用滔滔不绝的写作.net。
但是Laravel提供了集合类。 您可以在集合中使用filter方法来过滤给定回调的集合。
例如,如果您有一个名为$collection
的集合,那么您可以使用类似
$filtered = $collection->filter(function ($value, $key) {
return $value > 2;
});
$filtered->all();
因为您的查询很复杂,所以最好使用您的代码方式。如果您收集问题,这将会很麻烦