pagination di relasi has many

langsung kemasalah

ModelOrang —has_many–> ModelBuku

ingin menampilkan pagination untuk daftar orang-orang yang sudah pernah menulis buku dan diterbitkan,


 

            $cri = new CDbCriteria();

            $cri->distinct = true;

            $cri->with = array('relasikeModelbuku');

            $cri->together = true;

            $cri->condition= 'relasikeModelbuku.publish=1';

            $teachermodel = new CActiveDataProvider('Modelorang', array(

                        'criteria' => $cri,

                        'pagination'=>array(

                                'pageSize'=>10,

                            ),

                ));



seingat ane dulu di YII yang awal tidak muncul masalah seperti ini,

jadi masalahnya :

jika ada 50 orang, dan 10 diantaranya menulis sejumlah buku,

maka pagination itu berlakunya untuk jumlah buku yang terpanggil. memang limit record yang tampil adalah 10,

dan 10 record tersebut bisa jadi hanya milik satu orang saja.

akibatnya dengan menuliskan pageSize 10, orang yang tampil hanya 1 orang saja, karena batasan limit di querynya hanya memanggil 10 record, yang ternyata milik satu orang.

harapannyakan seharusnya, data orang yang tampil ada 10 orang, terserah berapa record yang muncul. kalo ada yang mengalami kasus sama mohon petunjuk.

sepertinya memamgn behaviornya untuk relasi has many / many many seperti itu. dan pendekatan teknis pagination yang paling simple memang lewat limit di recordnya.

Jadi pegination bukan pageing AR, tapi limit record yang di conversi jadi AR,

ketika hasil query

A, 1

A, 2

A, 3

B,9

B,10

sudah dianggap satu page dengan ukuran 10, meskipun jumlah ARnya hanya baru2 yaitu A, B.

Kalo dipikir pikir memang tidak mungkin juga menjadikan pageSize menjadi AR count. mungkin tapi sulit sekali dan bisa jadi harus menembak query berjaki-kali.

klo berelasi , bisa gak gan pake get_class?




 $teachermodel = new CActiveDataProvider(get_class($this), array(

                        'criteria' => $cri,

                        'pagination'=>array(

                                'pageSize'=>10,

                            ),

                ));

walaupun sebetulnya ane sendiri belum ngerti get_class itu untuk apa. :D

sepertinya itu supaya mudah dicopy paste ke class model manapun, sehingga tidak perlu lagi mengganti nama classnya, otomatis detek class tempat function nya dituliskan

Ak juga menemui maslah yang sama sperti punya agan…

Alhamdulillah setelah nguprek2 forum yii setengah hari udah ketemu jawabannya ::)

tinggal nambahi script berikut ini gan :




$cri->group = 't.ModelorangID';



Ane juga baru ada masalah dengan pagination, bedanya ane lagi coba pake CPagination bukan CActiveDataProvider. Masalah ane saat menggunakan CPagination adalah data yang ditampilkan per-halaman tidak ditentukan oleh pageSize alias biar page berapapun data yg ditampilkan tetap sama (padahal udah coba petunjuknya dari sini), pageSize hanya menetukan berapa jumlah link page yg digenarete oleh CLinkPage berdasarkan jumlah record. Akhirnya ane coba mengambil data dari variabel page yg digenerate dari link pagination, yg kemudian ane jadikan patokan limit (Tutorial dari sini, yg bagian Complex Way), akhirnya masalah terpecahkan juga. Saran ane, coba aja pake cara tsb untuk ngakalin limit.

Oya, ane mw tanya hasil query dari AR dg criteria di atas, hasilnya emang seprti ini ?

Misal: Penulis = A,B,C,D. Buku(published) = AA,BB,CC,DD,FF,GG,XX,YY

No | Penulis | Buku


  1. | A | AA

  2. | A | BB

  3. | A | CC

  4. | A | DD

… | … | …

… | … | …

  1. | B | XX

10.| B | YY

Ane agak bingung kok paginationnya dan hasil query relasi HAS_MANY berdasarkan buku bukan penulis ?