[Yii Framework] Insert Banyak Data dengan Jappendo

Menanggapi request seorang teman yang ingin menginput banyak data sekaligus pada suatu tabel dengan menggunakan JAppendo. Dengan kasus misal input tabel dosen dan mahasiswa. Dimana dia ingin menginput beberapa data mahasiswa, mahasiswa diinput satu persatu, tetapi dosen hanya sekali terisi. Dimana semua nama mahasiswa tadi akan memiliki dosen yang telah diinput satu kali tadi. Sama seperti tutor tentang jappendo sebelumnya, kita definisikan dulu view di Jappendo yang kita miliki :

<table class="appendo-gii" id="<?php echo $id ?>">
 <thead>
   <tr>
      <th>Nama Mahasiswa</th><th>Kelas</th>
   </tr>
 </thead>
 <tbody>
   <?php if (count($model) == 0): ?>
     <tr>
       <td><?php echo CHtml::textField('nama[]','',array('style'=>'width:190px')); ?></td>
       <td><?php echo CHtml::textField('kelas[]','',array('style'=>'width:190px')); ?></td>
     </tr>
   <?php else: ?>
      <?php //for($i = 0; $i < count($model); ++$i): 
        foreach ($model as $value){
      ?>
    <tr>
       <td><?php echo CHtml::textField('nama[]',$value->dosis,array('style'=>'width:90px')); ?></td>
       <td><?php echo CHtml::textField('kelas[]',$value->jumlah,array('style'=>'width:90px')); ?></td>
    </tr>
 <?php } ?>
   <tr>
     <td><?php echo CHtml::textField('nama[]','',array('style'=>'width:90px')); ?></td>
     <td><?php echo CHtml::textField('kelas[]','',array('style'=>'width:90px')); ?></td>
   </tr>
 <?php endif; ?>
 </tbody>
</table>

Nah, pada kasus di atas saya umpamakan ada field: dosen, mahasiswa dan kelas. Di jappendo di atas hanya disimpan field mahasiswa dan kelas. Tapi di tidak ada field dosen..

Dimana field dosen, kita akan menambahkan field dosen di luar jappendo. Dimana nantinya user tinggal menginput field dosen 1 kali, dan mahasiswa bisa berkali-kali sesuai jumlah mahasiswa yang diinput. Setelah itu semua mahasiswa yang kita input tadinya akan memiliki nama dosen sesuai dengan yang sudah kita input sebelumnya.

Untuk membuat alur seperti itu, di form tempat kita input nanti masukkan code seperti berikut :

<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
 'enableAjaxValidation'=>false,
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>

 <div class="row">
    <?php echo $form->labelEx($model,'diagnosa'); ?>
    <?php echo $form->textField($model,'diagnosa',array('size'=>60,'maxlength'=>255)); ?>
    <?php echo $form->error($model,'diagnosa'); ?>
 </div>

 <div class="row">
   <?php 
      $this->widget('application.extensions.appendo.JAppendo',array(
        'id' => 'repeateEnum',
        'model' => $model,
        'viewName' => 'namaViewJappendo',
        'labelDel' => 'Remove Row',
     )); 
 ?>
 </div>
<div class="row buttons">
 <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
 </div>
<?php $this->endWidget(); ?>
</div>

Kemudian setelah itu kita setting pada controller agar alur nya dapat sesuai dengan yang kita inginkan..

public function actionCreate()
{ 
  $model=new Mahasiswa;

  if(isset($_POST['Mahasiswa']))
  {
     $total = count($_POST['nama']);
     for ($i = 0; $i <= $total; $i++)
     {
       if(isset($_POST['nama'][$i]))
       {
         $model2 = new Mahasiswa;
         $model2->dosen =$_POST['Mahasiswa']['dosen'];
         $model2->nama=$_POST['nama'][$i];
         $model2->kelas=$_POST['kelas'][$i];
         $model2->save();
      }
    }
    $this->redirect(array('admin'));
  }
  $this->render('create',array(
   'model'=>$model,
  ));
}

Pada code di atas kita memasukkan data mahasiswa dengan memasukkan masing-masing field yang ada pada jappendo.. Tetapi untuk field dosen kita ambil dari inputan dosen yang telah ada bukan di jappendo melainkan di form tersebut dan hanya diinput satu kali..

 

Selesai..

Selamat mencoba.. Semoga membantu..

16 Responses to [Yii Framework] Insert Banyak Data dengan Jappendo

  1. emen says:

    kak di bagian ini “if (count($model) == 0)” kgk kedetect,
    di controllernya
    $model=new Mahasiswa;

  2. mksd ny g ke detect gimana gan?

    • emen says:

      dia langsung ke elsenya kak, jadinnya pas
      dosis,array(‘style’=>’width:90px’)); ?>
      errornya Trying to get property of non-object

  3. mungkin nilai $model nya ada yang terganti gan.. jadi nilai bukan lagi “new Mahasiswa”. Jadinya nilai nya lebih dari 0..

  4. mas, bisa dijelasin lagi untuk pembuatan view di jappendo nya, kok di baris yang ini

    dosis,array(‘style’=>’width:90px’)); ?>
    jumlah,array(‘style’=>’width:90px’)); ?>

    ane salah, katanya “define non-object…”

    trus ane lihat di postingan yang sebelumnya, parameter kondisinya kok beda2

    sekarang jika count($model) == 0
    sebelumnya jika ($model->mahasiswa == null)

    bedanya apa ya mas? maaf ane newbe…

    • Mifta SP says:

      waduh telat gabung nih ane, gan masalah yg ane dapet sama kayak abang fajar di atas.
      dosis,array(‘style’=>’width:90px’)); ?>//dosis itu apa nama variable gan??
      jumlah,array(‘style’=>’width:90px’)); ?>//jumlah itu apa nama variable gan??

      $model ane udah dicek tapi kayaknya gpp deh
      Semoga masih dibales.tengkyu gan

  5. itu error karena data yang di lempar ga ada gan… ikutin yang ini aja gan… kalo yang lama ngecek apakah ada isi nya si field mahasiswa. Kalo yang ini dia ngitung dulu total data yang di lempar, kalo jumlah nya nol dia ga masuk ke dalam kondisi if nya gan…

  6. shadiq says:

    menarik sekali. tapi saya coba saya dapat error begini kenapa ya?

    CDbCommand gagal menjalankan statementSQL: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`akunting`.`jurnal`, CONSTRAINT `fk_jurnal_produk1` FOREIGN KEY (`kode_produk`) REFERENCES `produk` (`kode`) ON DELETE NO ACTION ON UPDATE NO ACTION). The SQL statement executed was: INSERT INTO `jurnal` (`no***`, `ta****`, `ko***`, `d****`, `k****`, `ko****`, `ko*******`,`ko******`, `ket********`) VALUES (:yp0, :yp1, :yp2, :yp3, :yp4, :yp5, :yp6, :yp7, :yp8)

    trims sebelumnya

  7. shadiq says:

    o ya controller saya seperti ini:

    public function actionCreate()
    {
    $model=new Jurnal;

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST[‘Jurnal’]))
    {

    $total = count($_POST[‘ko*****’]);
    for ($i = 0; $i findBySQL(“select max(nomor) as nomor from j****”)->nomor;

    $model2->nomor = $nomor_akhir+1;
    $model2->tanggal = $_POST[‘J****’][‘tanggal’];

    $model2->ko*****=$_POST[‘ko****’][$i];
    $model2->d****=$_POST[‘d****’][$i];
    $model2->k*****=$_POST[‘k*****’][$i];
    $model2->k*****=$_POST[‘k****’][$i];
    $model2->k******=$_POST[‘k*****’][$i];
    $model2->k*******=$_POST[‘k********’][$i];
    $model2->ket*******=$_POST[‘ket******’][$i];
    $model2->save();
    }
    }

    //$model->attributes=$_POST[‘Jurnal’];

    $this->redirect(array(‘admin’));
    }

    $this->render(‘create’,array(
    ‘model’=>$model,
    ));
    }

  8. itu karena foreign key nya ga ada data nya di tabel master nya gan..

  9. Panda says:

    kalo untuk actionUpdatenya gimana bit?? biar bisa ngeload data pada jappendonya langsung

  10. saya udah pernah posting itu gan.. coba di cari aja..

    Kunjungi Juga Farifam.com untuk tutorial dan forum Yii Framework yang lebih lengkap dan direspon lebih cepat dari di blog ini..

  11. Pingback: [Yii Framework] Update Data Table/ Grid Form With JQrelCopy | Sabitlabscode

  12. anindya says:

    Gan kenapa saya tidak bisa simpan datanya ke dalam database?
    Mohon pencerahannya ya 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: