Yii Framework - Insert multiple table dalam 1 form

alfa6661
- June 02, 2015
0 (0 votes)
Rate :
Cara menyimpan data ke banyak table menggunakan 1 form pada Yii Framework

Untuk beberapa kasus kita memerlukan menginput data untuk beberapa table dalam 1 form / sekali submit. Sebagai contoh, kita memiliki 2 table (table users dan table user_profiles) yang diwakili oleh model User dan model UserProfile.

table users

column
id
email
password


table user_profiles

column
user_id
name


Dalam kasus ini kita perlu untuk menyimpan data users dan user_profiles dalam 1 form. Untuk membuatnya kita dapat mendefinisikannya dalam kode dibawah ini:

Controller

public function actionCreate()
{
    $user=new User;
    $profile=new UserProfile;
    if(isset($_POST['User'], $_POST['UserProfile']))
    {
        $user->attributes=$_POST['User'];
        $profile->attributes=$_POST['UserProfile'];
 
 	// validasi model
        $valid=$user->validate();
        $valid=$profile->validate() && $valid;
 
        if($valid)
        {
            $user->save(false);
            
            $profile->user_id = $user->id;
            $profile->save(false);
            $this->redirect(array('index'));
        }
    }
 
    $this->render('create', array(
        'user'=>$user,
        'profile'=>$profile,
    ));
}

Untuk menambahkan kolom user_profiles di form, kirimkan data profile ke view dengan menambahkan parameter pada fungsi renderPartial.

create.php

<?php echo $this->renderPartial('_form', array(
	'user'=>$user, 
	'profile'=>$profile
)); ?>

_form.php

<?php $form = $this->beginWidget('zii.widgets.CActiveForm'); ?>
	
	<?php echo $form->errorSummary(array($user, $profile)); ?>

	<div class="row">
        <?php echo $form->labelEx($user, 'email'); ?>
        <?php echo $form->textField($user, 'email'); ?>
        <?php echo $form->error($user, 'email'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($user, 'password'); ?>
        <?php echo $form->passwordField($user, 'password'); ?>
        <?php echo $form->error($user, 'password'); ?>
    </div>
 
    <div class="row">
        <?php echo $form->labelEx($profile, 'name'); ?>
        <?php echo $form->textField($profile, 'name'); ?>
        <?php echo $form->error($profile ,'name'); ?>
    </div>

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

Kode diatas juga bisa digunakan jika kita akan menyimpan lebih dari 2 model.

Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter

– Eric S. Raymond

Have a better explanation?

If you have comments about this post. Please write your comments below

No comments associated with this article