1. Uncategorized

Yii Framework – Menampilkan data relasi pada CGridView

Untuk beberapa kasus, kita memerlukan untuk menampilkan data yang berelasi pada CGridView. Secara default hasil generate gii tidak menangani kasus ini, oleh karena itu pada artikel ini kita akan membahas bagaimana cara menampilkan data pada CGridView dari model yang berelasi.

Hasil generate gii

CGridView Yii Framework

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:

Data Relasi CGridView
Comments to: Yii Framework – Menampilkan data relasi pada CGridView

    Your email address will not be published. Required fields are marked *

    Attach images - Only PNG, JPG, JPEG and GIF are supported.