亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試使用 10 公里以下的表單從 Db 獲取數據

嘗試使用 10 公里以下的表單從 Db 獲取數據

PHP
紅顏莎娜 2022-08-19 10:27:33
我正在嘗試使用形式通過緯度和經度從10公里記錄下的數據庫獲取數據,但我面臨著erorr埃羅爾Illuminate\Database\QueryException SQLSTATE[42S22]: 列未找到: 1054 “have clause” 中的未知列 'distance' (SQL: select count(*) 作為距離< 25 的聚合)users網.phpRoute::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 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

我認為最適合您的解決方案是在用戶表中添加列距離,而不是在模型中添加突變體,如下所示:

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();

希望它能:)


查看完整回答
反對 回復 2022-08-19
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

將 ->havingRaw('distance < 25') 替換為 have('distance', '<' , 25)



查看完整回答
反對 回復 2022-08-19
?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

解決


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]);



}


查看完整回答
反對 回復 2022-08-19
?
慕后森

TA貢獻1802條經驗 獲得超5個贊

用于使用內置方法,如下所示: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();


查看完整回答
反對 回復 2022-08-19
  • 4 回答
  • 0 關注
  • 100 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號