2017-03-17 96 views
0

我試圖根據價格(從最低到最高,從最高到最低)對db記錄(遊覽)進行排序。我已經分別在db中添加了12個虛擬記錄(價格從100到1200)。下面是我在控制器代碼進行排序查詢:當排序,以最高的最低的選擇,記錄根據db表的價格價格欄中顯示以下順序無法根據價格對記錄進行排序laravel

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

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

並且當最高到最低的選擇記錄根據分貝表的價格的價格欄顯示在順序如下:

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

任何人都可以幫助我嗎?

+0

它在我看來好像Laravel試圖將您的數字排序爲字符串。你確定這些數字是保存在數據庫中的一個「INT」列(或任何其他數字類型)嗎? –

回答

-1

數據庫中price列的數據類型是什麼?

它應該是一個數字格式,如doubleinteger,以便排序正常工作。

+0

Is'nt this comment? –

+0

不,這是一個答案。這個問題可能與列類型有關,因此建議將其更改爲「integer」或「double」。 –

+0

好的,我在你的答案上看到問號,要求清楚,其中的清晰度可以在評論中提問 –

0

按訂單查詢訂單。

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

'orderBy'的放置沒有區別... –

+0

@NirajShah它確實如果不是,請說明? – V16

+0

在Laravel,它沒有任何區別。我有兩個查詢:'User :: where('first_name','LIKE','%niraj%') - > orderBy('created_at','asc') - > get();'User :: orderBy ('created_at','asc') - > where('first_name','LIKE','%niraj%') - > get();'。 如果啓用查詢日誌記錄'DB :: enableQueryLog()',你會發現兩者產生完全相同的SQL: 'select * from'users' where first_name' LIKE? order by'created_at' asc' 在SQL中,它的確如此,因爲在'WHERE'之前放置'ORDER BY'會導致語法錯誤。 –

相關問題