Laravel - 刀片视图中的分页模型排序链接

时间:2016-05-29 22:33:00

标签: php laravel eloquent laravel-5.2

在laravel 5.2中,我有一个模型的分页表。

@CityController

public function index(Request $request){
        $cities = City::orderBy('name');
        return view('pages.city.index', ["cities" => $cities ->paginate(25)]);
    }

这很好用,但是当我尝试在刀片视图中对结果进行排序时不起作用。

@ index.blade.php

<table>
  <thead>
    <tr class="sui-columnheader">
      <th class="sui-headercell" data-field="Id">
        <a href="{!! $cities->appends(['sort' => 'id'])->links() !!}">Id</a>
      </th>
 </thead>
 <tbody class="list">
    @foreach ($cities as $city)
    <tr class="sui-row">
      <td class="sui-cell id">{!! $city->id !!}</td>
    </tr>
 </tbody>
</table>

单击排序按钮时,只需重新加载页面,但不应用排序。

是因为“orderBy”条款? 如何使其工作并默认按名称排序? 我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

或许这样的事情。您可能希望确保限制传递给orderBy的内容。像“...something?sort=blah”这样的网址会导致您的表没有的orderBy('blah'),这会导致数据库错误。

public function index(Request $request)
{
    $cities = City::orderBy($request->input('sort', 'name'))->paginate(25);
    return view('pages.city.index', ['cities' => $cities]);
}

{{ $cities->appends(Request::query())->render() }}

只是给你一个功能性的例子,但你必须根据自己的规则进行调整。

appends只允许您根据当前排序继续进行分页,方法是通过分页链接的查询字符串传递排序选项。

<强>更新

使用您的示例,其中有一个默认值,但想象可以有不止一个其他字段进行排序:

$sort = trim($request->input('sort'));
// if it is in the acceptable array use it, otherwise default to 'name'
$sort = in_array($sort, ['id', ...]) ? $sort : 'name';
$cities = City::orderBy($sort)->paginate(25);

<table>
    <tr>
        <th><a href="{{ Request::fullUrlWithQuery(['sort' => 'id']) }}">ID</a></th>
        <th><a href="{{ Request::url() }}">NAME</a></th>
        ...
    </tr>
    @foreach ($cities as $city)
    <tr>
        <td>{{ $city->id }}</td>
        <td>{{ $city->name }}</td>
        ...
    </tr>
    @endforeach
...
{{ $cities->appends(Request::query())->render() }}

举个例子,你可以按照自己的意愿去做。