Giriş yapmadınız.

#1 12.03.2019 14:17:01

ykulac
Üye
Kayıtlı: 28.01.2019
Mesajlar: 11

eloquent grup ile sayfalama sorunu

merhaba. eloquent ile iki gruplama ile kayıtları çekiyorum.
gelen yapı şu şekilde liste veriyor.

  -- 2019
  --- MART 2019
  ---------- kayıtlar

   --- ŞUBAT 2019
  ------- kayıtlar

sorgulama yaptığım kod bu.

$videohaberler = Haber::selectRaw('*, YEAR(eklenme_tarihi) yil, MONTH(eklenme_tarihi) ay')
                        ->where('aktif', '1')
                        ->where('videohaber', '1')
                        ->where('eklenme_tarihi', '<=', $bugun)
                        ->where('eklenme_tarihi', '>=', $besyilonce)
                        ->orderBy('yil','desc')
                        ->orderBy('ay','desc')
                        ->orderBy('saat','desc')
                        ->paginate(74)                                                                   
                        ->groupBy('yil')
                        ->transform( function($item, $k) {return $item->groupBy('ay'); }); 

kayıtları listelediğimde her şey düzgün çalışıyor. paginate() buraya yazdığım değere göre kayıtlarıda listeliyor.
ancak sayfalama linklerini  " videohaberler->links();  " yazdıramıyorum. şu hatayı veriyor.

Method links does not exist.

bo konuda ne yapabilirim?

Çevrimdışı

#2 12.03.2019 16:17:01

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,702
Website

Yanıt: eloquent grup ile sayfalama sorunu

paginate() yönteminden sonra artık Collection üzerinde işlem yapıyorsunuz. Doğal olarak sonuç da artık Collection objesi olmuş oluyor ve içerisinde links() diye bir yöntem yok.

Deneme şansım olmadığı için çalışır mı bilmiyorum ama \Illuminate\Pagination\AbstractPaginator::getCollection() yöntemi var. Onu kullanarak şöyle bir şey yapılabilir belki:

...
->orderBy('saat','desc')
->paginate(74);

$result = $videohaberler->groupBy('yil')->getCollection()->transform( function($item, $k) {
    return $item->groupBy('ay');
}); 

Sonuçları listeletirken $result değişkenini kullanacaksınız; sayfalama linklerini göstermek için $videohaberler->links();

Onun dışında diğer yol ise istediğiniz Collection yapısını oluşturduktan sonra Illuminate\Pagination\LengthAwarePaginator ile manuel sayfalama yapmak.

Çevrimdışı

#3 12.03.2019 19:16:58

ykulac
Üye
Kayıtlı: 28.01.2019
Mesajlar: 11

Yanıt: eloquent grup ile sayfalama sorunu

$videohaberler = Haber::selectRaw('*, YEAR(eklenme_tarihi) yil, MONTH(eklenme_tarihi) ay')
                        ->where('aktif', '1')
                        ->where('videohaber', '1')
                        ->where('eklenme_tarihi', '<=', $bugun)
                        ->where('eklenme_tarihi', '>=', $besyilonce)
                        ->orderBy('yil','desc')
                        ->orderBy('ay','desc')
                        ->orderBy('saat','desc')
                        ->paginate(2);                        

                        $result = $videohaberler->getCollection()->groupBy('yil')->transform( function($item, $k) {
                            return $item->groupBy('ay');
                        }); 

bu şekilde istediğim işlemi yaptım. çok teşekkür ederim. big_smile

Çevrimdışı

Forum alt kısmı