Pada saat membuat sebuah aplikasi, kita pasti akan menemukan beberapa table yang saling berelasi satu sama lain, dan kita pasti akan membutuhkan data yang berelasi tersebut untuk ditampilkan dalam daftar. Karena jika tidak, hal ini tentu akan sangat menyulitkan untuk pengguna mengetahui nilai dari suatu kolom.
Pada artikel ini akan di contohkan bagaimana cara menampilkan data pada GridView dari model yang berelasi.
Sebagai contoh, Kita memiliki table provinsi dan kota. Dalam hal ini, table kota akan memiliki relasi dengan provinsi, yang ditandai dengan kolom id_provinsi.
Provinsi
Kolom | Tipe Data |
id | Integer Primary Key |
nama | Varchar |
Kota
Kolom | Tipe Data |
id |
Integer Primary Key |
nama | Varchar |
id_provinsi | Integer |
Generate Gii
Langkah pertama, generate model untuk kedua table di atas. Kemudian, generate CRUD untuk model Kota (kita akan menggunakan model ini untuk contoh).
Gambar diatas merupakan hasil generate gii untuk actionIndex. Seperti kita lihat, nilai id provinsi masih berupa angka, yang mana hal ini tentu saja akan sangat menyulitkan pengguna untuk mengetahui nama provinsi dari kota yang ada. Secara default gii tidak menangani hal ini, oleh karena itu kita harus membuatnya secara manual.
Model
Pada model Kota pastikan anda telah mendefinisikan relasi ke model provinsi. Karena kita akan memanfaatkan relasi ini.
/** * @return \yii\db\ActiveQuery */ public function getProvinsi() { return $this->hasOne(Provinsi::className(), ['id' => 'id_provinsi']); }
Berikut ini adalah kode default hasil generate gii.
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'id', 'nama', 'id_provinsi', ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
Langkah selanjutnya untuk menampilkan nama provinsi pada GridView diatas, modifikasi file index.php (views/kota/index.php)
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'id', 'nama', [ 'attribute' => 'id_provinsi', 'value' => function($data) { return $data->provinsi->nama; } ], ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
Dengan kode diatas kita sudah bisa menampilkan nama provinsi pada table kota.
0 comment
No comments associated with this article