Jul 162012
 

Composite Primary Key di yii

Assalamu’ alaikum wr wb

Pengertian dari Composite Primary Key adalah adalah kunci yang terdiri dari 2 atau lebih atribut yang secara unik mengidentifikasi suatu kejadian entitas. Setiap atribut yang membentuk kunci senyawa adalah kunci sederhana dalam haknya sendiri.

Untuk membuat crud dalam Yii secara default yii mengharuskan ada satu primary key, kalo ada 2 atau lebih key maka gii yang ada pada yii akan menolak.

Trus bagaimana caranya, Berikut adalah langkah – langkahnya.

edit controller, di sini saya punya table dengan nama tbl_dokter_obat dengan primary key ada pada [d_code, o_code].

    public function actionView($id, $id2) {
        $this->render('view', array(
            'model' => $this->loadModel($id, $id2),
        ));
    }
    public function actionUpdate($id,$id2) {
        $model = $this->loadModel(  $id,$id2 );

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if (isset($_POST['DokterObat'])) {
            $model->attributes = $_POST['DokterObat'];
            if ($model->save())
                $this->redirect(array('view', 'id' => $model->d_code ,'id2'=>$model->o_code));
        }

        $this->render('update', array(
            'model' => $model,
        ));
    }
    public function actionDelete($id,$id2) {
        if (Yii::app()->request->isPostRequest) {
            // we only allow deletion via POST request
            $this->loadModel($id,$id2)->delete();

            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
            if (!isset($_GET['ajax']))
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
        }
        else
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
    }
    public function loadModel($id,$id2) {
        $model = DokterObat::model()->findByPk(array('d_code'=>$id,'o_code'=>$id2));
        if ($model === null)
            throw new CHttpException(404, 'The requested page does not exist.');
        return $model;
    }

Kode diatas di gunakan untuk CRUD
Setelah itu ubah juga pada tombol link yang ada pada view admin.

<?php $this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'dokter-obat-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'columns'=>array(
		'dokter.o_name',
		'obat.o_name',
		'do_value',
		'user_entry',
		'date_entry',
		array(
			'class'=>'CButtonColumn',
			'template'=>'{view}{update}{delete}',
			'buttons'=>array
			(
				'view' => array
				(
					'url'=>'Yii::app()->createUrl("dokterobat/view", array("id"=>$data->d_code,"id2"=>$data->o_code))',
				),
				'update' => array
				(
					'url'=>'Yii::app()->createUrl("dokterobat/update", array("id"=>$data->d_code,"id2"=>$data->o_code))',
				),
				'delete' => array
				(
					'url'=>'Yii::app()->createUrl("dokterobat/delete", array("id"=>$data->d_code,"id2"=>$data->o_code))',
				),
			),
		),
	),
)); ?>

Kode di atas di gunakan untuk mengubah parameter pada tombol yang ada pada grid.
Oke selamat mencoba.

Wassalamu’ alaikum wr wb

Facebook Comments

  One Response to “Composite Primary Key di yii”

  1. Mohon pencerahan bagaimana cara memindahkan coloum menu yii yang ada di sebelah kanan ke sebelah kiri pada yii

    Terima kasih atas pencerahannya

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

(required)

(required)