如何将mysql距离查询转换为Laravel雄辩查询(带纬度、经度和半径参数)

如何将mysql距离查询转换为Laravel雄辩查询(带纬度、经度和半径参数),mysql,laravel,latitude-longitude,laravel-6,Mysql,Laravel,Latitude Longitude,Laravel 6,我有一个mysql查询,可以获取组织的最近位置。我想把它转换成Laravel雄辩的查询,这样我就可以得到组织模型的属性函数。可能吗?这是我的代码: public function getNearesOraganization(Request $request) { $mi = 10; $centerLat = $request->lat; $centerLng = $request->lng; // $orgs

我有一个mysql查询,可以获取组织的最近位置。我想把它转换成Laravel雄辩的查询,这样我就可以得到组织模型的属性函数。可能吗?这是我的代码:

public function getNearesOraganization(Request $request)
    {

        $mi = 10;
        $centerLat = $request->lat;
        $centerLng = $request->lng;
        // $orgs = Organization::all();
        // foreach ($orgs as $key => $value) {
        //     $value->distance = $this->distance(floatval($centerLat), floatval($centerLng), floatval($value->lat), floatval($value->lng));
        //     dump($value->distance);
        // }

        $orgs = \DB::select(
            \DB::raw(

                "SELECT id,
                        org_name,
                        org_street,
                        org_cityprov,
                        org_state,
                        org_zipcode,
                        org_lat,
                        org_lng,
                        ( 3958.8  *
                            acos(
                                    cos( radians($centerLat) ) *
                                    cos( radians( org_lat ) ) *
                                    cos( radians( org_lng ) - radians($centerLng) ) +
                                    sin( radians($centerLat)) *
                                    sin( radians( org_lat ) )
                                )
                        )
                        AS distance
                FROM organizations
                HAVING distance < $mi
                ORDER BY distance ASC"
            )
        );

        foreach ($orgs as $key => $value) {
            $value->f_distance = number_format($value->distance, 2);
        }

        return response()->json($orgs, 200);
    }

一种方法是使用

这个图书馆

那么您的代码将被删除

公共函数getNearesOraganizationRequest$request { $query=Model::地理围栏$request->lat,$request->lng,0,10; $orgs=$query->get; 返回响应->json$orgs,200; }
我使用Laravel模型范围对其进行编码

public function scopeNearestInMiles($query, $mi, $centerLat, $centerLng)
    {
        return $query
            ->select(\DB::raw("*,(3958.8  *
                                acos(
                                        cos( radians(" . $centerLat . ") ) *
                                        cos( radians( org_lat ) ) *
                                        cos( radians( org_lng ) - radians(" . $centerLng . ") ) +
                                        sin( radians(" . $centerLat . ")) *
                                        sin( radians( org_lat ) )
                                    )
                            )
                            AS distance"))
            ->having('distance', '<', $mi)
            ->orderBy('distance');
    }
在控制器中


$orgs=Organization::nearestInMiles$mi、$centerLat、$centerLng->get

爸爸叫阿宝。很好,这能帮上忙,。。但是我不想安装另一个lib。我看到github文档需要将latlong的数据类型更新为double数据类型。这会有更多的更新,谢谢。。谢谢@Kamlesh Paul,如果没有其他选择,我将集成库。@AbingPj然后复制他的特性并在您的模型中使用,它有更多的功能,可以完全使用