是否有可能将查询构建器的结果投影到一个函数调用中,在一个有说服力的查询构建器上下文中


Is it possible to project query builder results into a function call, inside an eloquent query builder context

一个员工有许多员工区域,我需要检查哪些员工的员工区域在$ latlgcol集合中任何点的12km范围内。

我需要知道我是否正在尝试做一些有可能的事情,或者我是否应该查看DB原始查询和存储过程/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中,使用实体框架,它看起来像这样:

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

我需要知道我是否可以写出类似的东西,而不必诉诸RAW查询。

你不能用eloquent来写。net。

但是Laravel提供集合类。你可以在集合中使用filter方法,通过给定的回调来过滤集合。

示例如果您有一个名为$collection的集合,那么您可以使用如下函数对其进行过滤

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

既然你的查询是复杂的,最好使用你的代码方式。如果你收集你的问题