【问题标题】:Add the orderBy if the Request::get('xyz') field exist如果 Request::get('xyz') 字段存在,则添加 orderBy
【发布时间】:2016-12-09 21:39:11
【问题描述】:

在下面的分页查询中,我使用 OrderBy 方法添加了排序代码,但在第一次重新加载页面时出错,因为那里没有设置排序和排序字段。我如何设置它是否存在或设置为 null 或其他。

->select(array(
                'to_jobs.rec_id',
                'to_jobs.contarct_code',
                'to_jobs.job_num',
                'to_sites.site_name',
                'to_sites.postcode',
                'to_sites.site_id' 
                ))
            ->orderBy(Request::get('sort'), Request::get('order'))
            ->leftjoin('to_sites', 'to_jobs.fk_site_id', '=', 'to_sites.site_id')
            ->paginate(10);

【问题讨论】:

  • 当然,您每次运行分页代码时都需要以相同的顺序对结果进行排序,否则您最终会丢失行或在多个页面上显示一些行

标签: php laravel


【解决方案1】:

如果你使用 Eloquent,你可以使用local scope。

对于query builder查询,可以尝试使用when():

->when(request()->has('sort'), function ($q) {
    return $q->orderBy(request()->sort, request()->order);
})

【讨论】:

    【解决方案2】:

    您可以简单地使用if 语句检查sort 输入,然后构建您的分页。

    试试这个。

    $query->select(array(
            'to_jobs.rec_id',
            'to_jobs.contarct_code',
            'to_jobs.job_num',
            'to_sites.site_name',
            'to_sites.postcode',
            'to_sites.site_id'
        ))
        ->leftjoin('to_sites', 'to_jobs.fk_site_id', '=', 'to_sites.site_id');
    if (Request::has('sort'))
    {
        $query->orderBy(Request::get('sort'), Request::get('order'));
    }
    $query->paginate(10);
    


    参考:

    【讨论】:

      猜你喜欢
      • 2017-01-20
      • 2014-07-15
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 2019-07-16
      • 2019-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多