【发布时间】:2020-08-13 15:02:50
【问题描述】:
我正在尝试返回一个教师类型的用户列表,这些用户具有关联的教师个人资料、关联的班级和位置,并且在邮政编码 15 英里范围内。
如果没有该模型和用户的记录,它似乎会返回每个 obj 值为 null 的类型的每个用户,它会正确地添加到位置的距离,但没有按距离过滤,不知道为什么。
但我想要的只是具有教师资料(教师模型)和 15 英里范围内位置的用户。
我的模型中的函数
public function searchLocationsByDistance($query, $lat, $lng, $max_distance = 15){
$query->getQuery()->locations = [];
return $query->select('*')
->selectRaw("( 3959 * acos( cos( radians($lat) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians($lng) ) + sin( radians($lat) ) * sin(radians(lat)) ) ) AS distance")
->having('distance', '<=', $max_distance)
->orderBy('distance');
}
我的控制器中的函数
public function search(Request $request){
$input = $request->all();
//Just google api search this populates fine.
$location = $this->geolocatePostcode( $input['postal_code'] );
$instructors=\App\User::with(['teacher', 'teacher.class','teacher.location' => function ($query)
use($location) {
$locations = new Location;
$locations->searchLocationsByDistance($query,$location->lat,$location->lng);
}])
//->where('type', '==', 'instructor')
->get();
// var_dump($instructors);
return response()->json($instructors->toArray());
}
任何人都可以建议我的查询有什么问题或指导我正确的方向。
【问题讨论】:
标签: laravel laravel-5 eloquent geolocation