2016-05-29 10 views
1

laravel 5.2では、モデルのページテーブルがあります。Laravel - ページ区切りモデルのソートリンクをブレードビューで表示

@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"句のためですか? 私はそれを動作させ、デフォルトで名前順にすることができますか? 何か不足していますか?

+0

たとえば、次のように "asc"または "desc"命令を追加してみてください:$ cities = City :: orderBy( '​​name'、 'asc'); –

+0

@ Diego182変更なし。 –

+0

変更しよう - > links()TO - > render() - https://laravel.com/docs/5.1/pagination –

答えて

2

これはおそらくこのようなものです。あなたはそれに渡すことができるものを制限することを確認したいでしょうorderBy。 "...something?sort=blah"のようなURLの場合は、テーブルにはないDBエラーが発生する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() }} 

機能的な例を示していますが、独自のルールに基づいて調整する必要があります。

は、ページングリンクのクエリ文字列を介して並べ替えオプションを渡すことで、現在の並べ替えに基づいてページ付けを続けることができます。

更新:

$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() }} 

ただ、たとえば、あなたが行うことができます:

デフォルトがあり、あなたの例を使用しますが、想像によってソートするだけで1他の分野よりも多くが存在することができますこれはどのようにしたいですか?

+0

私はちょうど私がソートリンクをクリックすると、URLが変更されていないことを認識します。変更する必要がありますか? –

+0

どのような並べ替えのリンク? – lagbox

+0

Id

関連する問題