🚀 Laravel Eloquent Sorgularında Veri Sonuçlarını Sınırlama ve Sayfalama (Pagination)
Kullanıcının İzlediği Adımlar:
- Ana rotadaki (/) mevcut all() metodunu orderBy() ve limit() ile değiştirerek sonuç sayısını sınırlandırmak.
- Hem ana rotadaki (/) hem de liste rotasındaki
(/{slug})sorgulardalimit(4)->get()metodunu simplePaginate(4) ile değiştirmek. - Görünüm dosyasına
(resources/views/index.blade.php)sayfalama bağlantılarını($links->links())eklemek için gerekli Blade kodunu eklemek.
Kısa Teknik Özet: Bu rehber, Laravel Eloquent sorgularında performansı ve okunabilirliği artırmak için limit() ve simplePaginate() metotlarının kullanımını açıklar. Veritabanından çekilen verilerin ön yüzde (Blade şablonunda) nasıl sayfalandırılacağını gösterir.
💡 Bu Rehberde Ne Öğreneceksiniz?
Bu kılavuzda, Laravel Eloquent sorgularında yükleme sürelerini kısaltmak ve kullanıcı deneyimini iyileştirmek için iki temel teknik öğreneceksiniz:
- limit() metodu ile sonuç kümesini sınırlandırmak
- simplePaginate() metodu ile otomatik sayfalama uygulamak
Ayrıca, bu sayfalama bağlantılarının ön yüz (Blade) şablonunda nasıl gösterileceğini de göreceksiniz.
⚙️ Adım 1: Sorgu Sonuçlarını Sınırlama (limit())
İlk olarak, uygulama anasayfasında listelenen bağlantı sayısını limit() metodu ile kısıtlayalım.
Web Rota Dosyasını Açma: Rota tanımlarının bulunduğu dosyayı açın.
routes/web.php
all()->sortDesc() Yerine orderBy()->limit() Kullanma: Ana rotadaki (/) sorguyu güncelleyin.
// routes/web.php
Route::get('/', function () {
// En son eklenen 4 bağlantıyı veritabanı seviyesinde çeker
$links = Link::orderBy('created_at', 'desc')->limit(4)->get();
return view('index', [
'links' => $links,
'lists' => LinkList::all()
]);
});
Bu komut, tüm kayıtları çekip PHP’de sıralamak yerine, veritabanında sıralama ve sınırlama yapar.
🔄 Adım 2: Sonuçları Sayfalama (simplePaginate())
Tüm bağlantıların erişilebilir kalması için limit() yerine simplePaginate() metodunu kullanalım.
Ana Rotayı Güncelleme:
Route::get('/', function () {
$links = Link::orderBy('created_at', 'desc')->simplePaginate(4);
return view('index', [
'links' => $links,
'lists' => LinkList::all()
]);
});
Bu kod, her sayfada 4 kayıt gösterir ve otomatik sayfalama linklerini oluşturur.
Liste Rotasını Güncelleme:
Route::get('/{slug}', function ($slug) {
$list = LinkList::where('slug', $slug)->first();
if (!$list) {
abort(404);
}
return view('index', [
'list' => $list,
'links' => $list->links()->orderBy('created_at', 'desc')->simplePaginate(4),
'lists' => LinkList::all()
]);
})->name('link-list');
Her liste sayfası da 4 kayıtla sınırlanır ve kullanıcı sayfalar arasında gezinebilir.
🧱 Adım 3: Sayfalama Bağlantılarını Görünümde Gösterme
Blade Dosyasını Açma:
resources/views/index.blade.php
Sayfalama Kodunu Ekleme:
@if ($links->links()->paginator->hasPages())
<div class="mt-4 p-4 box has-text-centered">
{{ $links->links() }}
</div>
@endif
$links->links()metodu, sayfalama navigasyonunu otomatik olarak oluşturur.
Tarayıcıda Kontrol Etme: Sayfayı yenileyin; 4’ten fazla bağlantı varsa alt kısımda “Önceki” ve “Sonraki” bağlantılarını göreceksiniz.
❓ Sıkça Sorulan Sorular (SSS)
1. simplePaginate() ve paginate() arasındaki fark nedir?
simplePaginate() sadece ileri/geri bağlantıları gösterir.
paginate() ise toplam sayfa ve mevcut sayfa numarasını gösterir.
2. orderBy() neden önemli?
Sayfalama yaparken sıralama belirtilmezse, kayıtların sayfa sırası karışabilir.
Bu yüzden her zaman veritabanı düzeyinde orderBy() kullanılmalıdır.
3. Sayfalama SEO’ya katkı sağlar mı?
Evet, çünkü içerik küçük parçalara bölünür, yükleme süresi azalır ve sayfa bağlantıları arama motorları tarafından daha kolay taranır.
4. Sayfa başına kayıt sayısını nasıl dinamik yapabilirim?
.env dosyasına PAGINATION_PER_PAGE=10 gibi bir değişken ekleyin ve config() üzerinden çağırın.
🏁 Sonuç
Bu rehber sayesinde Laravel projelerinde sorgu performansını artırıp kullanıcı deneyimini iyileştirdiniz. Artık verileri limit() ve simplePaginate() ile kolayca yönetebilirsiniz.
💡 Daha fazla performans ve ölçeklenebilirlik için projelerinizi Rabisu Bulut sunucularında hemen çalıştırın! ☁️