[ask] gabungin SqlDataprovider ama cgridview. cuman query nya complex join table di postgres

ada yang tau g? cara gabungin query complex join ke csqlDataProvider? saya udah coba kayak gini




<?

$sql = "SELECT t.jats_buyer_no, sum(t.price) as total, r.customer_id, sum(r.price) AS total2,u.username,c.clientname,c.officeid

        FROM portfolio.trade_done AS t INNER JOIN portfolio.order_request AS r 

                ON (t.jats_buyer_no = r.jats_order_no) INNER JOIN schema_privileges.user_login as u

                ON (r.customer_id=u.userid) INNER JOIN schema_rtbo.client as c

                ON (u.username=c.clientid)

        GROUP BY t.jats_buyer_no, r.customer_id,u.username,c.clientname,c.officeid

        ORDER BY total ASC";


$dataProvider=new CSqlDataProvider($sql, array(

                        'db' => Yii::app()->dbpost,

                        'totalItemCount'=>$count,

                        'sort'=>array(

                                'attributes'=>array(

                                         'trade_date', 

                                ),

                        ),

                        'pagination'=>array(

                                'pageSize'=>5,

                        ),

                ));




$this->widget('zii.widgets.grid.CGridView', array(

        'id'=>'trade-grid',

        //'dataProvider'=>$model->newSearch(),  

        'dataProvider'=>$dataProvider,

        //'dataProvider'=>$model->newnew(),  

        'filter'=>$model,

        'columns'=>array(

                array(

                        'header'=>'No.',

                        'value'=>'$this->grid->dataProvider->pagination->currentPage*$this->grid->dataProvider->pagination->pageSize + $row+1',

                ),

        //      'trade_done_id',

                'jats_buyer_no',

                'r.costumer_id',

        ),

));


?>



data yang nampil cuman satu field saja "jats_buyer_no". sedangkan costumer_id tidak keluar. meskipun tidak pake "r." mohon pencerahan nya. udah stuck disini ampir 2 minggu. sambil googling juga blm dapet.

mungkin ada solusi seperti pake relations(). karena saya cuman ambil data, sebisa mungkin tidak merubah strukture database.

coba ‘r.costumer_id’ di buat alias misal ‘r.costumer_id as custid2’

jadi nanti yang di panggil yang custid2

udah saya coba tp malah muncul error not define

Property “Trade.costumer” is not defined. ada masukan lagi g? udah mulai bingung masa pake native php lagi :(

maksudku yang dirubah di sqlnya, menjadi:




$sql = "SELECT t.jats_buyer_no, sum(t.price) as total,r.customer_id as custid2 , sum(r.price) AS total2,u.username,c.clientname,c.officeid

        FROM portfolio.trade_done AS t INNER JOIN portfolio.order_request AS r 

                ON (t.jats_buyer_no = r.jats_order_no) INNER JOIN schema_privileges.user_login as u

                ON (r.customer_id=u.userid) INNER JOIN schema_rtbo.client as c

                ON (u.username=c.clientid)

        GROUP BY t.jats_buyer_no, r.customer_id,u.username,c.clientname,c.officeid

        ORDER BY total ASC";



sepertinya aku ngak melihat ada tabel Tride di sql nya

maksudnya sudah saya coba, sudah saya coba tambahkan satu "AS" dan saya coba panggil tp not define tp kalo saya pake r.customer_id grid nya muncul cuman tidak ada isi nya.

untuk Trade cuman nama controller nya saja, yang sebener nya manggil table portfolio.trade_done.

yang saya aneh saya coba jalankan query nya di query browser jalan data nampil seperti seharus nya.

Setau ane, kalau agan pakai AS, maka di class-nya harus dibuat property biar nggak undefined. Soalnya agan melibatkan sebuah model (dilihat dari parameter ‘filter’=>$model)

Solusinya menurut ane, hapus code itu kalau misalnya tidak butuh filter. Maka harusnya saran agan Hermans akan berjalan

Solusi lain tambahkan properti ke class model. Dalam kasus ini berarti seharusnya tambah :


public $custid2;

akan menyelesaikan masalah

:D langsung muncul mas data-data nya.


$this->widget('zii.widgets.grid.CGridView', array(

        'id'=>'trade-grid',

        //'dataProvider'=>$model->newSearch(),  

        'dataProvider'=>$dataProvider,

        //'dataProvider'=>$model->newnew(),  

        //'filter'=>$model,

        'columns'=>array(

                array(

                        'header'=>'No.',

                        'value'=>'$this->grid->dataProvider->pagination->currentPage*$this->grid->dataProvider->pagination->pageSize + $row+1',

                ),

        //      'trade_done_id',

                'jats_buyer_no',

                'r.costumer_id',

        ),

));

thanks mas junxiong n mas herman fast response nya :D, setelah di kasih alias dan filter nya di comment langsung muncul.

masalah nya di filter itu kayak nya. yang di deklarasikan di model Trade cuman 1 tabel, tp query yang saya pake multiple table jadi nya table yang lain tidak terdeteksi. bener g mas gitu?

satu lagi mas. mohon pencerahan nya.

di saya pagination nya ngaco kenapa ya? sebener nya data yang keluar sedikit tp muncul pagination yang banyak.

sudah ketemu deng masalah nya. salah perhitungan ^^




$co=Yii::app()->dbpost->createCommand($sql)->queryAll();

$count=count($co);