2017-03-17 18 views
0

価格(最低から最高、最高から最低)に従ってDBレコード(ツアー)をソートしようとしています。そして、dbに12個のダミーレコードを追加しました(100〜1200)。以下は、ソートクエリを実行するためのコントローラで私のコードです:ソートすることにより、最低、最高のを選択した場合は価格に基づいてレコードを並べ替えることができません。

public function short(Request $request) 
{ 
    if ($request->sortby == "lower") { 
     $query = Tour::query()->orderBy('price', 'asc'); 
     if (!empty($request->country)) { 
      $query = $query->whereHas('country', function($r) use($request) { 
       $r->where('countries.name', $request->country); 
      }); 
     }    

     if (!empty($request->category)) { 
      $query = $query->whereHas('category', function($s) use($request) { 
       $s->where('categories.name', $request->category); 
      }); 
     } 

     if ($request->days !== null) { 
      $days = $request->days; 
      $days_explode = explode('|', $days); 
      $query = $query->whereBetween('days', [$days_explode[0], $days_explode[1]]);      
     } 
     $query = $query->get(); 
    } 
    else{ 
     $query = Tour::query()->orderBy('price', 'desc');    
     if (!empty($request->country)) { 
      $query = $query->whereHas('country', function($r) use($request) { 
       $r->where('countries.name', $request->country); 
      }); 
     }    

     if (!empty($request->category)) { 
      $query = $query->whereHas('category', function($s) use($request) { 
       $s->where('categories.name', $request->category); 
      }); 
     } 

     if ($request->days !== null) { 
      $days = $request->days; 
      $days_explode = explode('|', $days); 
      $query = $query->whereBetween('days', [$days_explode[0], $days_explode[1]]);      
     } 
     $query = $query->get();    
    } 

    return view('public.tour.search')->withResults($query); 
} 

、レコードがdbテーブルの価格価格の列に応じて、以下の順序で表示されます。

100,1000,1100,1200,200,300,400,500,600,700,800,900

と最高最低に選択されたレコードは、DBテーブルの価格の価格列に応じて、以下の順序で表示されている場合:

900,800,700,600,500,400,300,200,1200,1100,1000,100

誰も助けてくれますか?

+0

Laravelが数字を文字列として並べ替えるかのように見えます。数字があなたのDBの 'INT'カラム(または他の数値タイプ)に保存されていると確信していますか? –

答えて

-1

データベース内のprice列のデータ型は何ですか?

ソートが正しく機能するには、doubleまたはintegerのような数値形式にする必要があります。

+0

これはコメントではありませんか? –

+0

それは答えです。この問題は、列の型と関係している可能性があります。したがって、それを 'integer'または' double'に変更することをお勧めします。 –

+0

[OK]をクール、喜ばない場合は明快で、 –

0

最後にクエリを入力します。

$query = $query->orderBy('price', 'asc')->get(); 
+0

配置orderBy'が違い...それはない –

+0

@NirajShahをしない 'のコメントで求められることができたの事私は、明確さを求め、あなたの答えに疑問符を参照してください説明する? – V16

+0

Laravelでは、違いはありません。私は2つのクエリを持っています: 'User :: where( 'first_name'、 'LIKE'、 '%niraj%') - > orderBy( '​​created_at'、 'asc') - > get();' 'User :: orderBy ( 'created_at'、 'asc') - >( 'first_name'、 'LIKE'、 '%niraj%') - > get(); 'DB :: enableQueryLog()'のクエリロギングを有効にすると、同じSQLを正確に生成することができます。 'select * from' users'ここで、 'first_name' LIKE? 'created_at' ascによって SQLでは、' WHERE'の前に 'ORDER BY'を置くと構文エラーが発生します。 –

関連する問題