Yii Framework - Menampilkan data relasi pada CGridView

alfa6661
- May 21, 2015
0 (0 votes)
Rate :
Cara menampilkan data yang berelasi pada CGridView Yii Framework

Untuk beberapa kasus, kita memerlukan untuk menampilkan data yang berelasi pada CGridView. Secara default hasil generate gii tidak menangani kasus ini.

Pada artikel ini akan di contohkan bagaimana cara menampilkan data pada CGridView dari model yang berelasi.

hasil generate gii

Bisa dilihat pada contoh diatas, hasil generate gii secara default menampilkan nilai id provinsi, bukan nama provinsi. Dari sisi user pengguna, akan lebih mudah dan nyaman jika melihat nama provinsi bukan id provinsi.

Terdapat 2 model, Provinsi dan Kabupaten dengan relasi sebagai berikut :

// model Provinsi
class Provinsi extends CActiveRecord
{
	// ...
	public function relations()
	{
		return array(
			'kabupatens' => array(self::HAS_MANY, 'Provinsi', 'id_provinsi')
		);
	}
	// ...
}

// model Kabupaten
class Kabupaten extends CActiveRecord
{
	// ...
	public function relations()
	{
		return array(
			'provinsi' => array(self::BELONGS_TO, 'Provinsi', 'id_provinsi')
		);
	}
	// ...
}

dan kode default pada CGridView adalah

$this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'kabupaten-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'columns'=>array(
		'id',
		'nama',
		'id_provinsi',
		array(
			'class'=>'CButtonColumn',
		),
	),
));

Untuk menampilkan nama provinsi, kita akan menggunakan relasi yang ada pada model Kabupaten (provinsi).

public function relations()
{
	return array(
		'provinsi' => array(self::BELONGS_TO, 'Provinsi', 'id_provinsi')
	);
}

Yang kita perlukan hanya mengubah value kolom id_provinsi dengan nama provinsi melalui relasi yang sudah didefinisikan di model.

$this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'kabupaten-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'columns'=>array(
		'id',
		'nama',
		array(
			'name' => 'id_provinsi',
			'value' => function($data) {
				return $data->provinsi->nama;
			}
		),
		array(
			'class'=>'CButtonColumn',
		),
	),
));

Dengan kode di atas hasil yang akan ditampilkan sebagai berikut :

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