как я могу найти близлежащие места по длине и широте по laravel - PullRequest
0 голосов
/ 27 сентября 2018

моя база данных:

|----|------|------|
| id | lat  | long |
|----|------|------|

когда я использовал этот код:

public function near($lat ,$lng)
{

    $cities = map::select(DB::raw('*, ( 6367 * acos( cos( radians('.$lat.') ) * cos( radians( lat ) ) * cos( radians( long ) - radians('.$lng.') ) + sin( radians('.$lat.') ) * sin( radians( lat ) ) ) ) AS distance'))
                ->where('distance', '<', 25)
                ->orderBy('distance')
                ->get();
    return response($cities);
}

это выдает мне ошибку:

SQLSTATE [42000]: синтаксисошибка или нарушение прав доступа: 1064 У вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'long) - радианы (5)) + sin (радианы (28)) * sin (радианы (широта))) AS distan' в строке 1(SQL: выберите *, (6367 * acos (cos (радианы (28)) * cos (радианы (широта)) * cos (радианы (длина) - радианы (5)) + sin (радианы (28)) * sin (радианы (лат)))) AS расстояние от maps, где distance <25, порядок <code>distance asc)

1 Ответ

0 голосов
/ 27 сентября 2018

Вы можете использовать псевдоним, чтобы получить расстояние

$dist = "(6371 * acos(cos(radians($location->latitude)) 
                     * cos(radians(model.latitude)) 
                     * cos(radians(model.longitude) 
                     - radians($location->longitude)) 
                     + sin(radians($location->latitude)) 
                     * sin(radians(model.latitude))))";
     return $query
        ->select() //pick the columns you want here.
        ->selectRaw("{$dist} AS distance")
        ->whereRaw("{$dist} < 25");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...