Sayfalama Nedir ?
Bunu bir örnekle açıklamak istiyorum. Mesela elimizde 500 tane veri var ve biz bir sayfada 20 adet görüntülenmesini istiyoruz. Daha sonra ikinci sayfaya geçtiğimizde ise 20 ile 40 arasındaki kayıtların listelenmesini istiyoruz. Bunun için sayfalama yöntemini kullanırız.
Laravel Sorgu Sonuçlarını Sayfalandırma
Sonuçları sayfalandırmanın birkaç yolu vardır. En basiti, Query builder ile sayfalandırma yöntemini veya Eloquent ORM yapısını kullanmaktır.
Paginate metodu, kullanıcı tarafından görüntülenen geçerli sayfaya göre sorgunun “limit” ve “ofsett” ayarlamalarını otomatik olarak halleder.
Aşağıdaki örnekte, paginate yöntemine iletilen tek argüman, “sayfa başına” görüntülenmesini istediğiniz öğe sayısıdır. Bu durumda sayfa başına 15 öğe görüntülemek istediğimizi belirtelim.
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\DB; class UserController extends Controller { /** * Show all of the users for the application. * * @return \Illuminate\Http\Response */ public function index() { return view('user.index', [ 'users' => DB::table('users')->paginate(15) ]); } }
Basit Sayfalandırma
paginate metodu, kayıtları veritabanından almadan önce sorgu tarafından eşleşen toplam kayıt sayısını sayar.
Bu işlem toplam kaç sayfa veri çekeceğimizi hesaplamak içindir.
Ancak, uygulamanızın kullanıcı arabiriminde toplam sayfa sayısını göstermeyi planlamıyorsanız, kayıt sayısı sorgusu gereksizdir.
Bu nedenle, uygulamanızın kullanıcı arayüzünde yalnızca basit “Sonraki” ve “Önceki” bağlantılarını görüntülemeniz gerekiyorsa, tek ve verimli bir sorgu gerçekleştirmek için simplePaginate yöntemini kullanabilirsiniz.
$users = DB::table('users')->simplePaginate(15);
Eleqouent Sonuçlarını Sayfalandırma
Ayrıca Eloquent sorgularını sayfalara ayırabilirsiniz. Bu örnekte, App\Models\USermodelini sayfalandıracağız ve sayfa başına 15 kayıt göstermeyi planladığımızı belirteceğiz. Gördüğünüz gibi, sözdizimi sorgu oluşturucu sonuçlarının sayfalandırılmasıyla neredeyse aynıdır.
use App\Models\User; $users = User::paginate(15);
Elbette, where ifadeleri gibi sorguda diğer kısıtlamaları ayarladıktan sonra sayfalama yöntemini çağırabilirsiniz.
$users = User::where('votes', '>', 100)->paginate(15);
Eloquent modellerini sayfalandırırken simplePaginate yöntemini de kullanabilirsiniz.
$users = User::where('votes', '>', 100)->simplePaginate(15);
Benzer şekilde, Eloquent modellerini sayfalandırmak için cursorPaginate yöntemini kullanabilirsiniz.
$users = User::where('votes', '>', 100)->cursorPaginate(15);
Sayfalandırma Sonuçlarını Görüntüleme
paginate yöntemini çağırırken, bir Illuminate\Pagination\LengthAwarePaginator örneğini alırsınız, simplePaginate yöntemini çağırmak için ise bir Illuminate\Pagination\Paginator örneğini döndürürüz.
Blade dosyamızda şu şekilde listeleyebiliriz:
div class="container"> @foreach ($users as $user) {{ $user->name }} @endforeach </div> {{ $users->links() }}
Sayfalandırma ile Gösterilecek Link Sayısını Ayarlama
Mesela 20 sayfalık bir verimiz var biz 14. sayfadayız. Eğer 14’ten 3 önceki ve 3 sonraki linkleri göstermek istiyorsak aşağıdaki yöntemi kullanabiliriz.
{{ $users->onEachSide(5)->links() }}