是否可以在一个雄辩的查询构建器上下文中

时间:2016-06-30 10:44:18

标签: php laravel eloquent query-builder

员工有很多员工区域,我需要检查哪些员工的员工区域在$ 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查询。

1 个答案:

答案 0 :(得分:0)

你不能用滔滔不绝的写作.net。

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

例如,如果您有一个名为$collection的集合,那么您可以使用类似

的函数对其进行过滤
$filtered = $collection->filter(function ($value, $key) {
    return $value > 2;
});

$filtered->all();

因为您的查询很复杂,所以最好使用您的代码方式。如果您收集问题,这将会很麻烦