Yii 2 - Menampilkan data relasi pada GridView

alfa6661
- February 16, 2016
0 (0 votes)
Rate :
Cara menampilkan data yang berelasi pada GridView Yii 2

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.

Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter

– Eric S. Raymond

Have a better explanation?

If you have comments about this post. Please write your comments below

No comments associated with this article