2017-03-17 69 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'会导致语法错误。 –

相关问题