[Yii Framework] Insert One to Many Relation dengan Data Yang Sudah Ada

Maksud dari postingan ini adalah untuk memecahkan permasalahan ketika kita ingin menginput data baru pada one to many relation tetapi dengan data yang sudah ada sebelumnya. Misal : Saya ingin menambahkan data mahasiswa mana yang telah mengambil mata kuliah dosen A, maka saat saya ingin menambahkan datanya, secara otomatis sistem akan menunjukkan semua list nama mahasiswa yang telah mengambil kuliah  dosen A. Okeh, berikut step-step nya :

Pada controller, buat 2 buah fungsi. Fungsi pertama adalah fungsi yang memerintahkan terlebih dahulu pengguna memilih dosen mana yang akan di masukkan, sedangkan fungsi kedua berfungsi untuk menginput nilainya. Berikut kodenya :

	public function actionUdosen()
	{
		if(isset($_POST['dosen']))
			$this->redirect(array('updosen','id'=>$_POST['dosen']));
		$this->render('udosen');
	}

	public function actionUpdosen($id)
	{
		$model=JunctionTab::model()->findAllByAttributes(array('dosenId'=>$id));

		if(isset($_POST['dosen']))
		{
			$total = count($_POST['mahasiswaId']);
		    for ($i = 0; $i <= $total; $i++)
		    {
		    	if(isset($_POST['mahasiswaId'][$i]))
		    	{
		     		$jiakakak = new JunctionTab;
		     		$jiakakak->dosenId =$_POST['dosen'];
		        	$jiakakak->mahasiswaId = $_POST['mahasiswaId'][$i];
		         	$jiakakak->save();
		    	}
		    }
			$this->redirect(array('admin'));
		}

		$this->render('dosenn',array(
			'model'=>$model,
		));
	}

Pada kedua fungsi tersebut, terlihat kita merender view “udosen” dan “dosenn”. Berikut adalah view “udosen” :

<?php $form=$this->beginWidget('CActiveForm', array(
	'id'=>'tinstrument-form',
	'enableAjaxValidation'=>false,
)); ?>
	<div class="row">
		<?php echo 'Pilih Dosen :'; ?>
        <?php echo CHtml::dropDownList('dosen',"string",
                Chtml::listData(Dosen::model()->findAll(),'id','dosen'),
                array('style'=>'width:200px'));
        ?>
	</div>

	<div class="row buttons">
		<?php echo CHtml::submitButton('Next'); ?>
	</div>

<?php $this->endWidget(); ?>

Dan berikut adalah view “dosenn” :

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
	'id'=>'junction-tab-form',
	'enableAjaxValidation'=>false,
)); ?>

	<div class="row">
		<?php echo 'Nama Dosen :'; ?>
        <?php echo CHtml::dropDownList('dosen',"string",
                Chtml::listData(Dosen::model()->findAll(),'id','dosen'),
                array('style'=>'width:200px'));
        ?>
	</div>

	<div class="row">
	    <?php $this->widget('application.extensions.appendo.JAppendo',array(
        	'id' => 'repeateEnum',
        	'model' => $model,
        	'viewName' => 'dosen',
        	'labelDel' => 'Remove Row',
    	)); ?>
    </div>

	<div class="row buttons">
		<?php echo CHtml::submitButton('Save'); ?>
	</div>

<?php $this->endWidget(); ?>

</div>

Okeh, jika anda sudah melaksanakan semua kode di atas. Sekarang download extension jappendo seperti postingan saya disini dan ikuti langkah penggunaannya. Pada folder “protected/extensions/views” buat file .php baru dengan nama “dosen.php”, lalu masukkan kode berikut :

<table class="appendo-gii" id="<?php echo $id ?>">
	<thead>
		<tr>
			<th>Nama </th>
		</tr>
	</thead>
	<tbody>
    <?php if (count($model) == 0): ?>
		<tr>
            <td>
            <?php echo CHtml::dropDownList('mahasiswaId[]',"string",
                Chtml::listData(Mahasiswa::model()->findAll(),'id','mahasiswa'),
                array('style'=>'width:200px'));
            ?>
            </td>
		</tr>
    <?php else: ?>
        <?php for($i = 0; $i < count($model); ++$i): ?>
    		<tr>
                <td>
                <?php echo CHtml::dropDownList('mahasiswaId[]',$model[$i]->mahasiswaId,
                	Chtml::listData(Mahasiswa::model()->findAll(),'id','mahasiswa'),
                	array('style'=>'width:200px'));
                ?>
                </td>
            </tr>
        <?php endfor; ?>
    <?php endif; ?>
	</tbody>
</table>

Selesai…

Jika sudah membuat fungsi di atas, silahkan anda jalankan dengan menjalankan fungsi “udosen” terlebih dahulu dengan cara masuk ke link : http://localhost/namaProject/index.php?r=namaController/udosen. Anda akan diperintahkan memilih dosen yang akan di tambahkan. Setelah itu anda secara otomatis akan masuk ke halaman : http://localhost/mtom/index.php?r=junctiontab/updosen&id=1 dimana di halaman tersebut anda akan melihat list semua nama mahasiswa yang telah mengambil mata kuliah dosen yang telah anda pilih sebelumnya. Lalu anda bisa menginput data nya dan langsung menyimpannya..

Selamat mencoba..

Semoga membantu…😀

5 Responses to [Yii Framework] Insert One to Many Relation dengan Data Yang Sudah Ada

  1. fachrizal says:

    gan tanya tentang cdbcriteria gan ,,,

    ane punya query gini :

    SELECT
    a.nik,
    a.nama,
    b.status,
    b.tahun,
    b.bulan
    FROM rpt0001 a
    LEFT JOIN docspkl b
    ON a.nik = b.nik
    WHERE a.bandposisi = ‘VI’ and a.namaunit=’blablabla’;

    gimana ya klo query diatas di jadikan criteria ??? blas ya gan,,,penting banget ni ,,,,

  2. fachrizal says:

    masalhnya udah solved kok ,,, hehehehe

  3. melengo says:

    kalok insert data secara bersaman dalam 2 table dengan relasi one to one gi mana gan

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: