2017-11-24 26 views
0

実行しようとしているクエリの解決策を探しています。 私は場所と呼ばれるデータベーステーブルを持っており、返された結果を変更/フィルタするフォームを送信できるようにする必要があります。Laravelユーザーのフォームからデータベース結果を取得する

ユーザーが選択できる2つのフィールドは、慈善団体&距離 です。フィールドは必須ではないため、設定されているかどうかを確認する必要があります。

私は現在、それは距離で作業しているが、両方を用いて充填されている場合、それは仕事を得ることができず、WHERE

私は慈善ラインを取る場合は、ここで私のコントローラ機能は

public function search(Request $request) 
    { 
     $circle_radius = 3959; 
     $max_distance = $request->Input(['distance']); 
     $charity = $request->Input(['charities']); 
     $lat = '53.5526'; 
     $lng = '-1.479726'; 

     $locations = DB::select(
      'SELECT * FROM 
       (SELECT *, (' . $circle_radius . ' * acos(cos(radians(' . $lat . ')) * cos(radians(latitude)) * 
       cos(radians(longitude) - radians(' . $lng . ')) + 
       sin(radians(' . $lat . ')) * sin(radians(latitude)))) 
       AS distance 
       FROM locations) AS distances 
      WHERE distance < ' . $max_distance . ' 
      AND charity = ' . $charity . ' 
      ORDER BY distance; 
      '); 

     return view('map.search', compact('locations')); 

    } 

ですちょうど距離で動作しますが、私は両方が必要です

+1

距離だけでなくチャリティでも動作しますか?クエリを記録し、手動で実行しますか?多分$慈善団体は正確な一致する価値を持っていません。また、あなたのやり方は非常に危険で、SQLインジェクションのリスクにさらされています –

+0

Laravelクエリービルダーを使用してこれを単純化/デバッグすることを検討しましたか?私はこの質問を破って、それがSQLの問題かPHPの変数の問題かどうかを判断することをお勧めします。 –

+0

$ request-> Input(['whatever'])ではな​​く、$ request-> input( 'whatever')でなければなりませんか? –

答えて

0

以下を実行すると、私のクエリが機能しました。もし誰かが良い解決策を知っていれば良いでしょう。

$max_distance = $request->input('distance'); 
     $charity = $request->input('charities'); 
     $lat = '53.5526'; 
     $lng = '-1.479726'; 

     $locations = Location::select('locations.*') 
        ->selectRaw('(3959 * acos(cos(radians(?)) * 
             cos(radians(latitude)) 
             * cos(radians(longitude) - radians(?) 
             ) + sin(radians(?)) * 
             sin(radians(latitude))) 
            ) AS distance', [$lat, $lng, $lat]) 
        ->havingRaw("distance < ?", [$max_distance]) 
        ->where('charity', '=', $charity) 
        ->get(); 
関連する問題