input form beda model

hi master, mau tanya donk tentang yii.

gw mau bikin form create dimana form itu ada create personal,school dan pekerjaan.

personal, school dan pekerjaan merupakan model/table yang berbeda,

gimana ya, cara nampilin ketiga form create yg udah digenerate yii dalam satu form create di personal?

kalau pake $this->renderPartial(’../school/create’,array(‘model’=>$model)); di view create personal ga bisa, kayaknya dia bentrok baca field antara personal dan school,

gw juga udah rubah ke $this->renderPartial(’../school/create’,array(‘model’=>$modelSchool));

dimana $modelSchool telah didefinisikan di actionCreate personal. $modelSchool = new school; and render di personal juga udah di ubah menjadi $this->render(‘create’,array(‘model’=>$model,‘modelSchool’=>$modelSchool));

help me …

:)

Mungkin kalau kasusnya satu form tapi beda-beda data model ini bisa bantu

http://www.yiiframework.com/doc/guide/form.builder

Coba cari yang bagian "Specifying Sub-form"

di situ dijelaskan sebuah form bisa mengandung form lain. Dan form-form yang dikandungnya bisa memiliki model-model tersendiri. Hanya saja pendekatan ini berarti harus pakai Form Builder.

Saya pribadi belum pernah menggunakan yang ini sih…

tapi semoga membantu

terima kasih buat jawabannya mas, kalau pake renderPartial ada yang bisa ga ya ? makasih.

kalau pakai renderPartial harusnya bisa, cuman ntar masing-masing form jadi ada submit nya saja (jadi ada bbrp tombol submit)…

masalah bentrok file, sepertinya memang tidak ada solusi…

kita bisa saja pakai


$this->renderPartial('/school/create',array('model'=>$modelSchool));

tapi isi dari file create.php yang ada di school yakni :


<?php echo $this->renderPartial('_formK', array('model'=>$model)); ?>

akan memanggil file _form.php nya si controller sekarang(contohnya kita taruh fungsinya di Personal, berarti _form.php nya si Personal), bukan punya si school/_form.php

jadi solusinya menurut saya adalah copy _form.php dan create.php ke dalam view si Personal tapi ganti nama saja.

untuk dapat nilainya sih tetap biasa

jadi di controller mirip dengan actionCreate() milik controller lain…

kurang lebih kek gini kali yah…


$modelP=new Personal;

               $modelS=new School;

		

		if(isset($_POST['Personal']) && isset($_POST['School']))

		{

			$modelP->attributes=$_POST['Personal'];

			$modelP->save();

                        $modelS->attributes=$_POST['School'];

			$modelS->save();

                        //redirect ke tempat yang diinginkan

		}


		$this->renderPartial('create',array(

			'model'=>$modelP,

		));

		


		$this->renderPartial('createSchool',array( //hasil copas

			'model'=>$modelS,

		));

kalo proses create nya sendiri-sendiri,

mau create personal pencet tombol A, trus yang lainnya B dan C no proble pake renderPartial masing-masing fornnya…

tapi kalo pencet sekali semua terinsert, ke tiap-tiap tabel dengan datanya masing-masing, ya ini lah gunanya CformModel.

jadi selain model personal, school, dan pekerjaan

agan harus buat satu lagi formmodel , dimana form model ini ada field-field yang identik dengan tiap Model

misal nih gan





//untuk personal

public $nama;

public $gender;


//untuk school

public $school_name;

public $school_address;


//untuk pekerjaan

public $joc_desc;

public $job_level;




//nah di form save nya


public function save()

{

    $modelpersonal = new PersonalModel;

    $modelSchool = new SchoolModel;

    $modelpekerjaan = new JobModel;


   //kmudian karena masing-masing propertynya indentik yang ada di model  juga ada di formmodel,

   // assignnya cukup begini aja


  

    $modelpersonal->attributes = $this->attributes;

     $modelpersonal->save();

    $modelSchool->attributes = $this->attributes;

    $modelSchool->save();

    $modelpekerjaan->attributes = $this->attributes;

    $modelpekerjaan->save();


}






rinciannya sambil nyoba sambil debug aja ya gan…

OK Gan,

Terima kasih buat infonya. Siap meluncur ke TKP.

Thanks.

Wah… benar!, banyak jalan menuju roma…

solusi kelas wahid semua

klo lagi di kejar deathline, ane hajar semuanya di controller…




// personalContoller.php

public function actionCreate(){


if(isset($_POST['personal']))

{

   $model->attributes=$_POST['personal'];  // paket kiriman semua POST tiba disini


    if($model->save()){       //   save ke model personal -> ambil id nya.


        $school= new school;

        $school->ID_School= $model-> ID_Personal;      // ini id yg didapat setelah model personal disave

        $school->School = $model->school;

        $school->save();      //  save ke model school


        $pekerjaan= new pekerjaan;

        $pekerjaan->ID_Pekerjaan= $model->ID_Personal; // ini id yg didapat setelah model personal disave

        $pekerjaan->Pekerjaan= $model->pekerjaan;

        $pekerjaan->save();   //  save ke model pekerjaan


    }

    $this->redirect(array('personal/admin/'. $redirect));


}



bisa juga dengan nenggunakan protected function afterSave()

dont try this at home…

oom kalo mau lebih advance lagi, ane baru nyoba sekali sih… tapi masih ragu untuk publish takut nya ada yang lebih bener trus malu…

predefined nya di simpna di procedure save yang di overwrite…

ini untuk kasus model yang sama di pake di banya form model,

biar tidak berkali-kali carving code, overwrite saja save function nya…

contoh kasus nya pas input tanggal…

ane buat property tambahan semancam




public tgl;

public bln;

public thn;


public function save()

{

  // nah disini gabunginnya

  $this->tanggal = $this->thn."-".$this->bln."-".$this->tgl;

  parent::save();

}

kalo agan-agan ada yang punya pertimbangan, mohon di sharing ya…

maksudnya gimana tuh bro untuk contoh kasus diatas(dng banyak model)

predefined memang wajib digunakan untuk param2x yg di luar rule() & dipakai berkali2x(overwritten), seperti buat limit, sort by, default value, etc.

thanks.

wah kalo yang pake banyak model kayaknya gak efektif karena makin perlu banyak nambah property baru,

yang sudah ane pake cuma untuk meng-copy nilai 3 listbox ( tgl, bln, thn ) kedalam property xxdate-nya model.

dan proses ini ane lakukan di overwritenya save di model.

ane coba dulu gan :D

gan ane sudah nyobak.

tapi kok satu kali submit menjadi banyak input… hrrrgggggg :angry: :angry:

pernah gak ngalamin seperti ane. ini suda saya coba berkali2 tapi hasilnya sama.