Laravel通过URL排序

时间:2018-11-15 20:40:40

标签: php laravel

我正在尝试向索引页面添加简单的排序,但是当我尝试包含搜索结果或向URL添加其他查询时,我陷入了冲突。这是我目前拥有的:

控制器

// Search default
if ($request->search == null) {
    $search = '';
} else {
    $search = $request->search;
}

// Sort default
if ($request->sort == null) {
    $sort = 'asc';
} else {
    $sort = $request->sort;
}

$doctors = Doctor::orderBy('last_name', $sort)
    ->where('first_name', 'LIKE', '%' . $search . '%')
    ->orWhere('last_name', 'LIKE', '%' . $search . '%')
    ->orWhere('type', 'LIKE', '%' . $search . '%')
    ->orWhere('npi', 'LIKE', '%' . $search . '%')
    ->orWhere('license', 'LIKE', '%' . $search . '%')
    ->orWhere('dea', 'LIKE', '%' . $search . '%')
    ->paginate(10);

return view('doctors.index')->with('doctors', $doctors);

刀片

{{ Form::open(['method' => 'GET']) }}
    {{ Form::text('search', null, ['class' => 'form-control form-control-sm', 'placeholder' => 'Search Doctors...']) }}
    {{Form::submit('Search', ['class' => 'btn btn-primary btn-sm'])}}
{{ Form::close() }}

@if(Request::input('sort', 'asc') == 'asc')
    <a href="?sort=desc">Name</a>
@else 
    <a href="?sort=asc">Name</a>
@endif

现在,?search=?sort=将独立工作。但是,如果我尝试搜索某些内容,然后对结果进行排序,则会清除搜索请求。我还想添加其他列,例如“许可证编号”,“地址”等,以便人们不仅可以按“名称”进行排序。但是,当我更改请求以添加?sortBy=之类的<a href="?sortBy=name?sort=desc">Name</a>时,排序方向不再起作用。

2 个答案:

答案 0 :(得分:0)

URL查询参数需要用&而不是?分隔,像这样:

<a href="?sortBy=name&sort=desc">Name</a>

答案 1 :(得分:0)

您需要将查询附加到$doctors

$doctors->addQuery('sort', request()->get('sort'))->addQuery('sortBy', request()->get('sortBy'))

编辑:

似乎api已更改为更高版本,因此请使用appends

->appends(['sort' => request()->get('sort'), 'sortBy' => request()->get('sortBy')])