Попытка получить данные из базы данных с помощью формы до 10 км - PullRequest
1 голос
/ 26 января 2020

Я пытаюсь получить данные из базы данных менее 10 км по широте и долготе, используя форму, но я сталкиваюсь с erorr

erorr

Осветить \ База данных \ QueryException SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «расстояние» в «имеющем предложении» (SQL: выберите количество (*) как совокупность из users, имеющего расстояние <25) </p>

Web. php

Route::get('/map','MapController@index');

Route::get('/userview','MapController@getUserByLatLong');

Route::post('/showdata','Mapcontroller@showdata');

User.blade. php

<form method="POST" action="{{ action('Mapcontroller@showdata') }}">
@csrf
<lable>Latitude</lable>
<input type="text" name="latitude" /><br>
<lable>Longitude</lable>
<input type="text" name="longitude" /><br>
<lable>Kilomneter</lable>
<input type="text" name="kilometer" /><br>
<input type="submit" name="submit" /><br>
</form>

Код контроллера

public function showdata(Request $request)
    {
        $this->validate($request, [
            'latitude' => 'required',
            'longitude' => 'required'
        ]);
        $latitude = $request->input('latitude');
        $longitude = $request->input('longitude');

        $users = DB::table('users')
        ->select(DB::raw($latitude,$longitude, 'SQRT(POW(69.1 * (latitude - 24.900110), 2) + POW(69.1 * (67.099760 -longitude) * COS(latitude / 57.3), 2)) AS distance'))
        ->havingRaw('distance < 25')
        ->OrderBy('distance')
        ->paginate(10)
        ->get();
        echo $users;
        return view('userview',['users' => $users]);


    }

Ответы [ 4 ]

0 голосов
/ 26 января 2020

Решено

public function showdata(Request $request)
{
    $this->validate($request, [
        'latitude' => 'required',
        'longitude' => 'required'
    ]);
    $latitude = $request->input('latitude');
    $longitude = $request->input('longitude');
    $users = DB::table('users')
    ->select(DB::raw('id,name,phone,latitude,longitude, SQRT(POW(69.1 * (latitude - '.$latitude.'), 2) + POW(69.1 * ('.$longitude.'-longitude) * COS(latitude / 57.3), 2)) AS distance'))
    ->havingRaw('distance < 25')
    ->OrderBy('distance')
    ->get();
    return view('userview',['users' => $users]);


}
0 голосов
/ 26 января 2020

Используйте whereRaw, чтобы использовать встроенный метод, подобный этому:

        $users = DB::table('users')
        ->select('latitude', 'longitude', DB::raw('SQRT(POW(69.1 * (lattitude - 24.900110), 2) + POW(69.1 * (67.099760 -longitude) * COS(latitude / 57.3), 2)) AS distance'))
        ->whereRaw('SQRT(POW(69.1 * (? - 24.900110), 2) + POW(69.1 * (67.099760 -?) * COS(? / 57.3), 2)) < 25', array($latitude, $longitude, $latitude))
        ->orderBy('distance')
        ->paginate(10)
        ->get();
0 голосов
/ 26 января 2020

Я думаю, что лучшее решение для вас - добавить расстояние до столбца в вашей пользовательской таблице, а затем добавить мутатор в вашу модель следующим образом:

public function setDistanceAttribute($value)
{
    return $this->attributes['distance'] = SQRT(POW(69.1 * ($this->['latitude'] - 24.900110), 2) + POW(69.1 * (67.099760 -$this->['longitude']) * COS(latitude / 57.3), 2));
}

, а затем обновить свой запрос:

 $users = DB::table('users')
        ->select(DB::raw($latitude,$longitude))
        ->havingRaw('distance < 25')
        ->OrderBy('distance')
        ->paginate(10)
        ->get();

Надеюсь, что это работает:)

0 голосов
/ 26 января 2020

Заменить -> Имеющий Raw ('расстояние <25') </strong> на имеющий ('Расстояние', '<', 25) </strong>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...