[view] 2 model 1 form… pada yii framework…
June 21, 2011 38 Comments
Untuk proses create(insert) 2 table dari satu form, anda dapat melihatnya disini. Nah, disini yang akan saya bahas adalah bagaimana cara menampilkan 2 tabel dalam 1 form.
Pertama, pada controller nya pastikan terdapat dua fungsi yang mengembalikan nilai pada kedua model tersebut seperti berikut:
public function loadModel($id) { $model=Satu::model()->findByAttributes(array('satusatu'=>$id)); if($model===null) throw new CHttpException(404,'The requested page does not exist.'); return $model; } public function loadModel2($id) { $model=Dua::model()->findByAttributes(array('duasatu'=>$id)); if($model===null) throw new CHttpException(404,'The requested page does not exist.'); return $model; }
Untuk “loadModel($id)” itu adalah fungsi yang dihasilkan otomatis pada saat yii framework menggenerate operasi CRUD. Fungsi loadModel itu sendiri akan mengembalikan sebuah nilai yang tabel yang memiliki PK=$id. Nah, karena kita disini akan memanggil juga tabel “Dua” maka kita harus sebuah fungsi yang mengembalikan nilai pada tabel “Dua”. Disinilah peranan dari fungsi “loadModel2($id)”, dimana fungsi tersebut akan mengembalikan nilai pada tabel “Dua” yang memiliki PK=$id.
Setelah itu, kita render nilai dari tabel “Satu” dan tabel “Dua” ke function actionView agar dapat ditampilkan. Code pada fungsi tampil akan menjadi seperti berikut:
public function actionView($id) { $this->render('view',array( 'model'=>$this->loadModel($id), 'model2'=>$this->loadModel2($id), )); }
Disana terlihat fungsi tersebut merender dua buah model, yaitu “model” dan “model2”. Setelah itu mari kita modifikasi file view nya yang terletak pada protected/views/namaModel/view.php.
Sebelum dilakukan perubahan, code pada halaman tersebut adalah sebagai berikut:
<?php $this->widget('zii.widgets.CDetailView', array( 'data'=>$model, 'attributes'=>array( 'satusatu', 'satudua', ), ));
Code diatas hanyalah menampilkan tampilan pada tabel “Satu”, untuk menampilkan tampilan nilai dari tabel “Dua”, cukup anda tambahkan code berikut tepat di bawah code di atas:
$this->widget('zii.widgets.CDetailView', array( 'data'=>$model2, 'attributes'=>array( 'duadua', ), ));
Code di atas menunjukkan bahwa kita akan menampikan nilai atribut “duadua” pada tabel “Dua”.
Selesai…. Selamat mencoba…
Semoga membantu 😀 ….
gan, ini kalo d pake buat input gimana?.,
jadi dari satu form, masuk ke 2 tabel.,
bisa gan, ada di post yg lain gan…
gan tanya. kenapa harus 2 form ya? kenapa gak satu aja ya di form yang kemarin di buat untuk upload. itu aja di kasih fungsi2 yang kyk gitu…… kalau 2 form. form mana yang untuk download da upload apa harus beda ya gan? (rin)
itu cuma 1 form kok gan, tapi dari 2 model ngambil nya… tapi saya nampilinnya di 2 CListView yang beda gan…
gan ane tanya. ane kan disuruh buat web nih. DB sudah disediakan. ane pikir ini mirip dengan kasus ini. ada dua tabel downtable dan uptable. gini gan. di uptable itu dia konek dengan down table. ada beberapa kesamaan di dua tabel itu, sma2 punya path url dari file, dan FK nya ada di table downtable. nah kira2 agan ngerti gak maksudnya? karena menurut ane cukup downtable aja udah bisa untuk download ma upload. kasus ini kan hampir sam ma tutorial agan. jadi sedikit penjelasan aja. bisa bantu gan? (rin)
ane ga tau detail kebutuhan agan kayak gimana. Kalo emang utk kelola file aja, ane biasa nya buat cuma 1 tabel gan. Kalo masalah upload ama download, ntar itu di buat fungsi nya.. Tapi kalo emang ada kbutuhan lain dibalik itu, ya mau ga mau 2 tabel gan..
kebutuhan lain kayak apa ya gan? ane juga merasa jadi 1
misal kalo mau dilakukan pencatatan statistik upload dan download gan..
gan tanya nich. kmrin sempet download pake X-sendfile. ke donload tapi gak ada isinya kenapa ya gan?
ni code ane
Yii::app()->request->xSendFile(Yii::app()->basePath.’/../upload/’.$model->downid.$model->downurl);
di $model->downurl = sudah ada typenya.
karena tiap yg ane simpen ane kasih id+namasli.type
misal: …./12sekar.jpg
gini gan. ke donlod tapi kosong. napa ya gan?
waduh, ga tau jga ga kalo x-sendfile.. ga pernah cobain..
biasanya pake apa gan untuk downlod?
langsung ane arahin langsung gan ke path nya.. 😀
itu bukannya untuk nampilin ya gan? kan beda sama download gan?
oh, punya agan file image ya? ane kirain .zip/.rar gitu… kalo gtu ane jga belum pernah coba malah gan..
wah terima kasi buanyak ya gan… atas bantuannya :D. senang diskusi dengan agan. nice to meet you and nice
okeh gan…
gan maap ane sering nongol ya :sorry
jadi gini gan, misalkan ane ada dua tabel yang satu tabel isinya (id_satu, nama, id_dua),
tabel kedua (id_dua, gender).
nah kalo misalkan ane pengen munculin yang kaya gini gmn ya gan?
mohon pencerahannya lagi master :sorry
munculin yg kayak gimana mksd ny gan?
jadi udah berhasil muncul gan dari dua tabel.
nah kan yang tabel dua isinya cuma ada 2 row, yaitu laki2 & perempuan.
jadi pengen nampilin id_satu, nama, gender(di tabel 2).
kalo misal query nya “SELECT a.id_satu, a.nama, b.gender FROM satu a, dua b WHERE a.id_dua = b.id_dua;
😀
coba agan cari di blog ini postingan tentang CSQldataprovider..
itu lebih enak kalo untuk nampilin data hasil join gan..
baik gan, ane coba explore lagi ya.
banyak bgt manfaatnya maen kesini, makasih banyak ya gan 🙂
sip…
Pak, kalau mau tampilkan dibagian “admin.php” actionAdmin saya harus rubah dimana ya? trus bisa atau tidak? soalnya keterangan diatas kan cuman bagian actionView saja. Thx.
pasti bisa pak.. tinggal mau dibuat seperti apa?
help gan..
ane uda ngikuti cara agan tapi kok selalu muncul
Call to a member function isAttributeRequired() on a non-object in D:\dokumen\www\project\2012\yii-1.1.9.r3527\framework\web\helpers\CHtml.php on line 1185
itu kenapa ya gan
bisa post controller n view nya gan?
iya udah ketemu gan ternyata ada kode yg keliru. Terus kalo untuk repopulated data kembali gmn gan? untuk contoh actionUpdate, punya saya ketika diklik update pd cgriedviewnya, untuk selectnya masih berbunyi -pilih salah satu-. Belum benar memilih nilai ‘selected’. Tp untuk id nya sudah bener sih gan masuk ke textfield yg lain
mksd ny gmana gan?
kayak yg disini ternyata gan http://www.yiiframework.com/wiki/24/creating-a-dependent-dropdown/#c3942
saya coba2 dulu gan yg ada disitu. mksh gan atas responnya
Numpang tanya neh, maklum baru belajar.
Kalau misalnya saya mau tampilkan data dari tabel dua secara tabular, gimana caranya bro?
Terima kasih
Salam Yii
saya masih bingung sama pertanyaannya. bisa dijelasin dengan contoh gan?
+———————————-+
| kode faktur : xxxxxx |
| nama toko : xxxxxxxxxxx |
+———————————-+
+—————————————–+
| kode | nama barang | jumlah | sub total |
+—————————————–+
| 001 | barang 001 | 1 | 5000 |
| 002 | barang 002 | 1 | 15000 |
| 003 | barang 003 | 1 | 25000 |
+—————————————–+
kira2 seperti itu gan, apa bisa yah diterapkan?
Terima kasih
Salam Yii
bisa mas.. coba mas lihat aja postingan di atas.. itu udah sama persis kayak kasus nya mas.. di masing2 data barang nya di kasih field kode faktur nya dan toko nya dimana dia punya relasi sama table kode faktur itu mas.. Trus ikutin aja contoh kayak postingan tsb..
Di controller
public function actionView($id)
{
$this->render(‘view’,array(
‘model’=>$this->loadModel($id),
‘model2’=>$this->loadModel2($id),
));
}
……
public function loadModel($id)
{
$model=Tuploadh::model()->findByPk($id);
if($model===null)
throw new CHttpException(404,’The requested page does not exist.’);
return $model;
}
public function loadModel2($id)
{
$model=Tuploadd::model()->findAllByAttributes(array(‘inkdupload’=>$id));
if($model===null)
throw new CHttpException(404,’The requested page does not exist.’);
return $model;
}
di view.php
$this->widget(‘zii.widgets.CDetailView’, array(
‘data’=>$model,
‘attributes’=>array(
‘inkdupload’,
‘chnamafile’,
‘chstatusupload’,
/*
‘incount’,
‘dttglcreated’,
‘chuncreated’,
‘dttglupdated’,
‘chunupdated’,
*/
),
));
$this->widget(‘zii.widgets.CDetailView’, array(
‘data’=>$model2,
‘attributes’=>array(
‘chkdcustomer’,
‘chnamacustomer’,
‘chalamattoko1’,
‘chalamattoko2’,
‘chkdsite’,
//’chuncreated’,
//’dttglupdated’,
//’chunupdated’,
),
));
Kira2 kalau dari code di atas apa lagi yang kurang yah?? soalnya di saya punya hasilnya gak seperti itu.. di tabel dua nya itu muncul nya cuma sebaris itu pun tampilanya seperti tabel satu..
Terima kasih
Salam Yii
Koreksi yah…
public function loadModel($id)
{
$model=Tuploadh::model()->findByPk($id);
if($model===null)
throw new CHttpException(404,’The requested page does not exist.’);
return $model;
}
public function loadModel2($id)
{
$model=Tuploadd::model()->findAllByAttributes(array(‘inkdupload’=>$id));
if($model===null)
throw new CHttpException(404,’The requested page does not exist.’);
return $model;
}
output saya jadinya gini
Kode Upload 25
Nama File 20130620_045932-user
Status Upload uploadedtoserver
Chkdcustomer 81028509
Chnamacustomer TOKO SAYANG
Chalamattoko1 BAJI ATEKA NO. 22
Chalamattoko2 SMPG KAMPUS KHARISMA
Chkdsite 818512
Terima kasih
Salam Yii
wah gan, terus terang kalo nanya coding panjang2 gitu saya males ngecek nya gan..
ow ya gpp..makasih reply nya.. mungkin bisa dihapus aja..hehehe..makasih banyak yah…