在laravel中搜索特定公里范围内的用户

时间:2017-11-22 21:09:18

标签: php mysql laravel

我正在构建脚本以在laravel内的公里范围内搜索用户。这是我的代码:

if ($request->has('city')) {

   $latitude = app('geocoder')->geocode($request->city)->get()->first()->getCoordinates()->getLatitude(); 
   $longitude = app('geocoder')->geocode($request->city)->get()->first()->getCoordinates()->getLongitude();

   $user->whereHas('user_data', function($query) use ($request, $latitude, $longitude) {
       return $query->whereRaw("( 6371 * acos ( cos ( radians(".$latitude.") ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(".$longitude.") ) + sin ( radians(".$latitude.") ) * sin( radians( latitude ) ) ) <= ". $request->distance .")")->get();
           });
        }

但问题是我收到了错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'users.id' in 'where clause' (SQL: select * from `user_datas` where `user_datas`.`user_id` = `users`.`id` and ( 6371 * acos ( cos ( radians(52.406374) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(16.9251681) ) + sin ( radians(52.406374) ) * sin( radians( latitude ) ) ) <= 10))

如何修复此问题并使代码正常工作?

1 个答案:

答案 0 :(得分:0)

怎么样......

$users = App\Users::whereRaw("( 6371 * acos ( cos ( radians(".$latitude.") ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(".$longitude.") ) + sin ( radians(".$latitude.") ) * sin( radians( latitude ) ) ) <= ". $request->distance .")")->get();