【问题标题】:Unable to sort records according to price laravel无法根据价格排序记录 laravel
【发布时间】:2017-08-08 20:01:36
【问题描述】:

我正在尝试根据价格(从最低到最高,从最高到最低)对数据库记录(游览)进行排序。我在 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);
}  

When sort by lowest to highest is selected, records are displayed in the following order according to price price column of db table:

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

and when highest to lowest is selected records are displayed in the following order according to price price column of db table:

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

谁能帮帮我?

【问题讨论】:

  • 在我看来,Laravel 似乎试图将您的数字排序为字符串。您确定这些数字保存在数据库中的 INT 列(或任何其他数字类型)中吗?

标签: php mysql laravel sorting laravel-5.4


【解决方案1】:

数据库中price列的数据类型是什么?

它应该是像doubleinteger 这样的数字格式才能正常进行排序。

【讨论】:

  • 这不是评论吗?
  • 不,这是一个答案。该问题可能与列类型有关,因此建议将其更改为 integerdouble
  • 好吧,我在你的答案上看到问号,要求清楚,其中的清楚可以在 cmets 中询问
  • 这个答案是正确的,非常正确。谢谢伙计....您实际上需要将数据类型更改为数字.. doubleinteger 如果不是,它将无法正确排序。
【解决方案2】:

将按查询排序。

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

【讨论】:

  • @NirajShah 有,如果没有请解释一下?
  • 在 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 中确实如此,因为将 ORDER BY 放在 WHERE 之前会导致语法错误。
猜你喜欢
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多