我想在雄辩的 ORM 中给定的 lat long 的基础上获得篮球场。我试图得到这个,但在这里我得到了这个错误。
Call to undefined function App\Http\Controllers\Api\RADIANS()
有没有办法使用 Eloquent 获取附近的位置如果是的话怎么办?请帮助我,我正在分享到目前为止我所做的事情。
主场控制器
public function fetchHomeCourts(Request $request) {
$validator = Validator::make(
array(
'lat' => $request->lat,
'long' => $request->long,
),
array(
'lat' => 'required',
'long' => 'required',
)
);
if ($validator->fails()) {
$this->setMeta("422", Constant::MSG_422);
return response()->json($this->setResponse());
}
$homeCourt= HomeCourt::where(ACOS(SIN(RADIANS('latitude'))*SIN(RADIANS($request->lat))+COS(RADIANS('latitude'))*COS(RADIANS($request->lat))*COS(RADIANS('longitude')-RADIANS($request->long)))*6380 < 10)->first();
if(!$homeCourt) {
$this->setMeta("200", "No courts found");
$this->setData("homeCourts",$homeCourt);
return response()->json($this->setResponse());
}
$this->setMeta("200", "Home court list");
$this->setData("homeCourts",$homeCourt);
return response()->json($this->setResponse());
}
所以这基本上是发生的事情:
用户将为您提供他们感兴趣的坐标(通过一个神奇的过程,大多数页面都会提供用户单击的地图,但这确实是最适合您的用户的)。
这是您的代码需要阅读的内容:
public function fetchHomeCourts(Request $request) {
$validator = Validator::make(
array(
'lat' => $request->lat,
'long' => $request->long,
),
array(
'lat' => 'required',
'long' => 'required',
)
);
if ($validator->fails()) {
$this->setMeta("422", Constant::MSG_422);
return response()->json($this->setResponse());
}
$homeCourt= HomeCourt::whereRaw("ACOS(SIN(RADIANS('latitude'))*SIN(RADIANS($request->lat))+COS(RADIANS('latitude'))*COS(RADIANS($request->lat))*COS(RADIANS('longitude')-RADIANS($request->long)))*6380 < 10")->first();
if(!$homeCourt) {
$this->setMeta("200", "No courts found");
$this->setData("homeCourts",$homeCourt);
return response()->json($this->setResponse());
}
$this->setMeta("200", "Home court list");
$this->setData("homeCourts",$homeCourt);
return response()->json($this->setResponse());
}
The whereRaw
bit 会将整个公式直接传递给 MySQL,而不是让 Laravel 尝试弄清楚如何将其构建到查询中(因为它不是 Laravel 可以处理的标准格式。
据我了解,该公式基本上是地球曲面上的距离(6380 是以公里为单位的地球半径,其余的看起来像两点的弧距)。
假设您感兴趣的所有法院都存储在您的数据库中(您可以拥有手动列表,也可以使用某种隔夜过程从某处获取它来更新它们),您不需要对每个请求运行 API 查询。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)