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));
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…
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,
));
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();
}
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()
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…