[Ask] Dependent Dropdown List (Again) [Solved]

Maaf gan nanya lagi tentang dependent dropdown list -->

Ane bikin form yang ada dependen dropdown list bsa jalan normal waktu create, tp trouble saat update

trouble nya :

jadi gini waktu create misal employee wktu ngisi kota harus isi propinsi dulu -> kemudian baru bisa pilih kotanya, ini create udah ok…

waktu di form update informasi tersebut, di bagian kota itu value nya ndak terisi, dan waktu proses simpan update jd muncul error "kota harus berupa angka"…

kalau di cek di database, semua value waktu create tersimpan dengan benar di database.

ini potongan source code model


public function rules()

	{

		// NOTE: you should only define rules for those attributes that

		// will receive user inputs.

		return array(

			array('EMP_ID, EMP_NAME, EMP_GENDER, EMP_BIRTH_PLACE, EMP_BIRTH_DATE','required','message'=>'{attribute} Tidak Boleh Kosong'),

			array('EMP_CITY_ID, EMP_PROVINCE_ID, EMP_POSTAL_CODE, EMP_COUNTRY_ID, EMP_ID_CARD, EMP_HI_CARD, EMP_DL_CARD, EMP_PHONE, EMP_CELL, EMP_ACCOUNT, EMP_JOB_ID, EMP_DEPT_ID, EMP_OFFICE_ID', 'numerical', 'integerOnly'=>true, 'message'=>'{attribute} Harus Berupa Angka'),

			array('EMP_ID', 'unique', 'on' => 'insert,update', 'message' => '{attribute}:{value} Sudah digunakan, Silahkan Gunakan nomor urut berikutnya!'),

			array('EMP_NAME', 'length', 'max'=>50),

			array('EMP_GENDER', 'length', 'max'=>10),

			array('EMP_BIRTH_PLACE, EMP_MARRIAGE', 'length', 'max'=>20),

			array('EMP_RELIGION', 'length', 'max'=>15),

			array('EMP_ADDRESS', 'length', 'max'=>100),

			array('EMP_NATIONALITY', 'length', 'max'=>35),

			array('EMP_NOTE_REASON', 'length', 'max'=>500),

			array('EMP_EMAIL, EMP_TAX', 'length', 'max'=>30),

			array('EMP_STATS', 'length', 'max'=>10),

			array('EMP_JOB_DESC', 'length', 'max'=>4000),

			array('EMP_PHOTO', 'file', 'types'=>'jpg, gif, png', 'allowEmpty'=>true, 'on'=>'insert, update', 'safe'=>true),

			array('EMP_ID_CARD_PERIOD, EMP_HI_CARD_PERIOD, EMP_DL_CARD_PERIOD, EMP_APP_DATE  EMP_START_CONT, EMP_END_CONT', 'safe'),

			// The following rule is used by search().

			// @todo Please remove those attributes that should not be searched.

			array('EMP_ID, EMP_NAME, EMP_GENDER, EMP_BIRTH_PLACE, EMP_BIRTH_DATE, EMP_MARRIAGE, EMP_RELIGION, EMP_ADDRESS, EMP_CITY_ID, EMP_PROVINCE_ID, EMP_POSTAL_CODE, EMP_COUNTRY_ID, EMP_NATIONALITY, EMP_ID_CARD, EMP_ID_CARD_PERIOD, EMP_HI_CARD, EMP_HI_CARD_PERIOD, EMP_DL_CARD, EMP_DL_CARD_PERIOD, EMP_START_CONT, EMP_APP_DATE, EMP_NOTE_REASON, EMP_PHONE, EMP_CELL, EMP_EMAIL, EMP_ACCOUNT, EMP_TAX, EMP_JOB_DESC, EMP_JOB_ID, EMP_PHOTO, EMP_DEPT_ID, EMP_OFFICE_ID, EMP_STATS, EMP_END_CONT', 'safe', 'on'=>'search'),

		);

	}


	/**

	 * @return array relational rules.

	 */

	public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

			'eMPCITY' => array(self::BELONGS_TO, 'CITY', 'EMP_CITY_ID'),

			'eMPCOUNTRY' => array(self::BELONGS_TO, 'COUNTRY', 'EMP_COUNTRY_ID'),

			'eMPDEPT' => array(self::BELONGS_TO, 'DEPARTMENT', 'EMP_DEPT_ID'),

			'dEPARTMENTs' => array(self::HAS_MANY, 'DEPARTMENT', 'DEPT_MGR_ID'),

			'eMPJOB' => array(self::BELONGS_TO, 'JOB', 'EMP_JOB_ID'),

			'eMPOFFICE' => array(self::BELONGS_TO, 'OFFICE', 'EMP_OFFICE_ID'),

			'eMPPROVINCE' => array(self::BELONGS_TO, 'PROVINCE', 'EMP_PROVINCE_ID'),

			'aTTENDANCEs' => array(self::HAS_MANY, 'ATTENDANCE', 'ATT_EMP_ID'),

			'sALARY' => array(self::HAS_ONE, 'SALARY', 'SAL_EMP_ID'),

			'eMPHEALTTYPE' => array(self::BELONGS_TO, 'HEALTH', 'HI_ID'),

		);

	}

ini potongan source code controller untuk filter




public function actionFilterkota()

	{

	

		$models = CITY::model()->findAll('CITY_PROVINCE_ID=:CITY_PROVINCE_ID',

			array(':CITY_PROVINCE_ID'=>(int)$_POST['EMP_PROVINCE_ID'])

		);

		

		$data=CHtml::listData($models,'CITY_ID','CITY_NAME');

		

		echo "<option value=''>-----Pilih Kota-----</option>";

		foreach($data as $value =>$CITY_NAME)

		echo CHtml::tag('option', array('value'=>$value),CHtml::encode($CITY_NAME),true);	

		

	}



ini potongan source code form




<div class="row-fluid">

	<div class="span4">

		<?php echo $form->dropDownListRow($model,'EMP_PROVINCE_ID', CHtml::listData(PROVINCE::model()->findAll(), 'PROVINCE_ID','PROVINCE_NAME'),array(

				'prompt'=>'----- Pilih Propinsi -----',

				'ajax'=>array(

				'type'=>'POST',

				'url'=>CController::createUrl('filterkota'),

				'update'=>'#EMPLOYEE_EMP_CITY_ID',

		                'data'=>array('EMP_PROVINCE_ID'=>'js:this.value'),

								)

	         )); ?>

	</div>

<div class="span4">

							<?php echo $form->dropDownListRow($model,'EMP_CITY_ID',  array('prompt'=>'----- Pilih Kota -----')); ?>

						</div>



kalo gini lumayan jelas, errornya karena baris ini:




<?php echo $form->dropDownListRow($model,'EMP_CITY_ID',  array('prompt'=>'----- Pilih Kota -----')); ?>



pada saat update, form mencoba assign EMP_CITY_ID sesuai nilai di dbnya, tapi karena pada dropdownlist tidak ada pilihan kotanya (kota baru populate saat pilih province khan?) maka EMP_CITY_ID akan berisi nilai ‘—Pilih Kota—’

solusinya, lakukan pengecekan, jika EMP_PROVINCE_ID data kotanya harus dipopulate, contohnya begini:




<?php echo $form->dropDownListRow(

  $model,

  'EMP_CITY_ID',  

  empty($model->EMP_PROVINCE_ID) ? 

    array() :

    CHtml::listData(CITY::model()->findAll('PROVINCE_ID='.$model->EMP_PROVINCE_ID), 'ID', 'NAME'),

  array('prompt'=>'----- Pilih Kota -----')); ?>



mmm ternyata pengecekannya pake


empty($model->EMP_PROVINCE_ID) ? 

    array() :

y om… :D

Sip Berhasil Om daudtm… :D trimakasih banyak…