[Yii Framework] Membuat Entry Data One to Many Relation dengan Tabel Dinamis

Pastinya banyak sekali kasus dimana kita diharuskan membuat form entry data yang dimana tabel nya memiliki hubungan one to many. Nah, biasanya untuk mempermudah user, kita membuat form entry data terebut menjadi sebuah tabel dinamis seperti gambar berikut:

Yah, bisa anda lihat disana dimana kita harus menginput sebuah data Kelas sekaligus murid-murid yang ada di dalam kelas tersebut.

Sebenarnya postingan ini adalah sedikit pengembangan pada postingan sebelumnya, jadi akan lebih baik jika anda membaca postingan sebelumnya terlebih dahulu :D. Okeh, langsung saja.. Sama seperti postingan sebelumnya, saya akan menjelaskan dulu definisi tabel-tabel yang saya gunakan pada postingan ini.

Saya disini menggunakan 2 buah tabel, tabel “Kelas” dan tabel “Murid”, berikut penjelasannya :

Tabel Kelas :

  • id : integer, Primary key, auto increment
  • namaKelas : varchar(10)
  • waliKelas : varchar(30)
Tabel Murid :
  • id: integer, Primary Key, auto increment
  • nama : varchar(50)
  • jk: varchar(10)
  • kelas : integer, Foreign Key tabel “kelas” attribute “id”
Mari kita mulai coding..
Pertama-tama lakuakan generate code Model dan CRUD kedua tabel tersebut dengan gii. Lalu download lah extension JAppendo disini. Extract dan letakkan pada folder “protected/extensions”. Sekarang buka “protected/controllers/KelasController.php”, lalu lakukan modifikasi pada code actionCreate menjadi seperti berikut:
	public function actionCreate()
	{
		$model=new Kelas;
		$model2=new Murid;

		if(isset($_POST['Kelas']))
		{
			$model->attributes=$_POST['Kelas'];
			if($model->save())
			{
				if(isset($_POST['nama']))
				{
					$total = count($_POST['nama']);
		    		for ($i = 0; $i <= $total; $i++)
		    		{
		    			if(isset($_POST['nama'][$i]))
		    			{
		     				$jiakakak = new Murid;
		     				$jiakakak->kelas=$model->id;
		        			$jiakakak->nama = $_POST['nama'][$i];
		        			$jiakakak->jk = $_POST['jk'][$i];
		         			$jiakakak->save();
		    			}	
					}
					$this->redirect(array('view','id'=>$model->id));
				}
			}
		}

		$this->render('create',array(
			'model'=>$model,
			'model2'=>$model2,
		));
	}

Penjelasan : Code di atas adalah code yang akan melakukan penyimpanan pada data baik data “Kelas” maupun data “Murid”. Disana terlihat saya melakukan perulangan pada penyimpanan tabelnya. Itu karena kita melakukan penyimpanan banyak data pada tabel “Murid”, sedangkan pada tabel “kelas” kita hanya melakukan penyimpanan 1 data saja. Lalu saya membuat attribut “kelas” pada tabel “Murid” tidak di input 1 per 1, melainkan langsung mengikuti semua “kelas” yang sudah di input di atas. Jadi nginput kelasnya cukup 1 kali aja dan itu akan mengarah ke semua murid yang di input di bawah nya..

Nah, kalo tabel yang anda gunakan berbeda attribut-attribut nya dengan yang saya paparkan, silahkan anda sesuaikan yak.. 😀

okeh, next step.. Buatlah sebuah file .php di protected/extensions/appendo/views/. Kasih nama  “jiakak”, jadi akan ada tabel jiakak.php di dalam folder tersebut. Lalu isi file tersebut dengan code berikut:

<table class="appendo-gii" id="<?php echo $id ?>">
	<thead>
		<tr>
			<th>Nama </th><th>Jenis Kelamin</th>
		</tr>
	</thead>
	<tbody>
    <?php if ($model->nama == null): ?>
		<tr>
			<td><?php echo CHtml::textField('nama[]','',array('style'=>'width:120px')); ?></td>
            <td>
            <?php echo CHtml::dropDownList('jk[]',"string",
                array(
                    "Laki-laki"=>"Laki-laki",
                    "Perempuan"=>"Perempuan",
                ),array('style'=>'width:100px'));
            ?>
            </td>
		</tr>
    <?php else: ?>
        <?php for($i = 0; $i < sizeof($model->nama); ++$i): ?>
    		<tr>
    			<td><?php echo CHtml::textField('nama[]',$model->nama[$i],array('style'=>'width:120px')); ?></td>
                <td>
                <?php echo CHtml::dropDownList('jk[]',$model->jk[$i],
                    array(
						"Laki-laki"=>"Laki-laki",
						"Perempuan"=>"Perempuan",
					),array('style'=>'width:100px'));
                ?>
                </td>
            </tr>
        <?php endfor; ?>
		<tr>
			<td><?php echo CHtml::textField('nama[]','',array('style'=>'width:120px')); ?></td>
            <td>
            <?php echo CHtml::dropDownList('jk[]',"string",
                array(
						"Laki-laki"=>"Laki-laki",
						"Perempuan"=>"Perempuan",
					),array('style'=>'width:100px'));
            ?>
            </td>
		</tr>
    <?php endif; ?>
	</tbody>
</table>

Penjelasan : code di atas adalah code untuk melakukan pengaturan attribut sesuai dengan tabel “Murid”. Saya disana memasuki attribute “nama” dan “jk” sesuai dengan yang ada pada database saya tadi. Tapi saya tidak memasukkan attribute “id” dan “kelas”, kenapa?? untuk attribute “id”, dia adalah attribtue dengan auto increment yang artinya attribute tersebut akan di input secara otomatis dari database, jadi ga perlu di input. Sementara attribute “kelas”, saya akan mengambil nilai nya dari inputan lain, jadi ga saya masukin biar ga nginput 1 per 1 nilainya.. 😀 . Lagi-lagi jika tabel anda berbeda dengan yang saya miliki, silahkan anda modifikasi sesuai dengan attribute yang ada di tabel anda :D…

Lalu buka “protected/views/kelas/_form.php”, tambahkan sebuah attribute seperti berikut:

	<div class="row">
	    <?php $this->widget('application.extensions.appendo.JAppendo',array(
        	'id' => 'repeateEnum',        
        	'model' => $model2,
        	'viewName' => 'jiakak',
        	'labelDel' => 'Remove Row',
       		// 'cssFile' => 'css/jquery.appendo2.css'
    	)); ?>
    </div>

Sehingga code lengkap pada “_form.php” nya akan menjadi seperti berikut:

<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
	'id'=>'kelas-form',
	'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,'namaKelas'); ?>
		<?php echo $form->textField($model,'namaKelas',array('size'=>10,'maxlength'=>10)); ?>
		<?php echo $form->error($model,'namaKelas'); ?>
	</div>

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

	<div class="row">
	    <?php $this->widget('application.extensions.appendo.JAppendo',array(
        	'id' => 'repeateEnum',        
        	'model' => $model2,
        	'viewName' => 'jiakak',
        	'labelDel' => 'Remove Row',
       		// 'cssFile' => 'css/jquery.appendo2.css'
    	)); ?>
    </div>

	<div class="row buttons">
		<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
	</div>
<?php $this->endWidget(); ?>
</div>

Penjelasan : code di atas adalah form input yang akan di tampilkan. Disana saya menambahkan sebuah control tabel dinamis yang digunakan untuk melakukan input data dengan tabel dinamis yang bisa kita tambahkan dan kurangi sesuka hati :D.

Nah, jika anda sudah berhasil melakukan proses di atas..Harusnya anda sudah bisa melakukan input data dengan menggunakan tabel dinamis. Terakhir mari kita poles tampilan untuk menampilkan datanya agar lebih enak dilihat. Bukalah “protected/views/kelas/view.php”, lalu edit menjadi seperti berikut:

<?php
$this->breadcrumbs=array(
	'Kelases'=>array('index'),
	$model->id,
);

$this->menu=array(
	array('label'=>'List Kelas', 'url'=>array('index')),
	array('label'=>'Create Kelas', 'url'=>array('create')),
	array('label'=>'Update Kelas', 'url'=>array('update', 'id'=>$model->id)),
	array('label'=>'Delete Kelas', 'url'=>'#', 'linkOptions'=>array('submit'=>array('delete','id'=>$model->id),'confirm'=>'Are you sure you want to delete this item?')),
	array('label'=>'Manage Kelas', 'url'=>array('admin')),
);
?>

<h1>View Kelas #<?php echo $model->id; ?></h1>

<?php $this->widget('zii.widgets.CDetailView', array(
	'data'=>$model,
	'attributes'=>array(
		'id',
		'namaKelas',
		'waliKelas',
	),
)); ?>

<?php $this->widget('zii.widgets.grid.CGridView', array(
	'dataProvider'=>$murid,
	'columns'=>array(
		'id',
		'nama',
		'jk',
		 array(
            'name'=>'Kelas',
            'value'=>'Kelas::model()->findByPk($data->kelas)->namaKelas',
        ),
	),
)); ?>

Lalu jangan lupa di KelasController, tepatnya di actionView, edit code ny menjadi seperti berikut:

public function actionView($id)
	{
		$kelas=Murid::model()->findByAttributes(array('kelas'=>$id));
                $haha=new CDbCriteria;
                $criteria=new CDbCriteria;
                $criteria->compare('kelas',$id);
 
                $murid=new CActiveDataProvider('Murid',
                     array('criteria'=>$criteria,)
                );
		$this->render('view',array(
			'model'=>$this->loadModel($id),
			'murid'=>$murid,
		));
	}

Dan anda akan lihat hasilnya seperti berikut:

Hohohoho….

Selesai… Selamat mencoba… dan lagi-lagi pesan saya… silahkan anda modifikasi code di atas sesuai tabel anda…

Semoga membantu… 😀

152 Responses to [Yii Framework] Membuat Entry Data One to Many Relation dengan Tabel Dinamis

  1. heri says:

    Permisi numpang tanya2..Gan..saya masih pemula bgt gan? kalo bikin input data kya gimana ya gan..
    tetapi pas data saya input ternyata data tersebut sudah ada di query

    misalnya saya masukan data Perjalanan :
    Kotaasal: Bandung
    Kotatujuan: Jakarta

    nah ketika saya input Bandung cama Jakarta ternya data tersebut sudah ada. itu gimana ya gan codingnya…tolong kasih pencerahan..thanks..

  2. sabitzhabit says:

    sebelum agan save, agan cek dlu aja gan data nya ada apa nggak misal kek gini:
    $itu=Kota::model()->findByPk($id);
    if($itu==null)
    {
    simpanData;
    }
    else
    {
    janganSimpanData;
    }

  3. Pingback: [Yii Framework] Membuat Entry Data Many to many dengan Tabel Dinamis « Sabitlabscode

  4. Pingback: [Yii Framework] Insert One to Many Relation dengan Data Yang Sudah Ada « Sabitlabscode

  5. angel says:

    q nyoba koding diatas gan, tp kalo create kelas ko error ‘Undefined variable: model2 ‘ ya?
    sorry ganggu gan…
    masih newbie c….
    br belajar yii 4 hr….
    tq
    ;D

  6. sabitzhabit says:

    di controller ny, di action create nya uda di definisiin belum model2 ny gan? kek gini contohnya :
    $this->render(‘create’,array(
    ‘model’=>$model,
    ‘model2’=>$model2,
    ));

  7. angel says:

    udah jd gan…
    ternyata di view createnya lom ditaruh model2 …
    tq…

  8. angel says:

    kalo buat upload file bisa ga appendonya??

  9. angel says:

    udah tek coba pake filefield ternyata bisa buat upload ga….
    tq…

  10. sabitzhabit says:

    sory gan, ane baru buka blog nya..
    hehe, udah bisa ya gan.. okeh deh…

  11. angel says:

    q coba di satu foorm ada 2 appendonya…
    tp appendo yg ke 2 ga ada add rownya…
    memang ga bisa di satu form ada lebih dari satu appendo ya???
    soalnya q joinnya 4 table…
    n kalo mo ditambah di view tabel utamanya q ga bisa….
    hiks….

  12. sabitzhabit says:

    ga ada add row ny mksd ny cuma input 1 row aja gan? klo gtu mending ga usah pake appendo, pake form biasa aja gan.. tapi klo emang harus pake appendo, harusnya bisa2 aja kok gan dipake lebih dari 1..

  13. angel says:

    iya….
    q coba main2 di appendonya, eh malah add rownya nambahnya diyang pertama…
    jadi appendo yg pertama punya 2 add row tapi yg kedua ga ada sama sekali…
    dah pernah coba pake ztabularinputmanager gan???
    q mo coba pake tp masih lum mudeng koding2nya ditaruh dimana….

  14. sabitzhabit says:

    oh, iya sih gan.. bisa jadi itu karena dia nangkep nilainya ketimpa2 gan sama jappendo yg satu nyo..
    ga pernah coba jga gan..

  15. angel says:

    ya udah…
    q mo coba cari cara lain….
    tq gan…

  16. ardi says:

    di view data muridnya kok muncul semua ga di bagi per kelas gan? di tunggu pencerahannya ^^

  17. sabitzhabit says:

    hmm, klo yg saya paparin di atas udah di bagi per kelas kok gan..
    itu bisa dilihat dari code pada controller nya yg : $kelas=Murid::model()->findByAttributes(array(‘kelas’=>$id));

  18. angel says:

    emang muncul semua gan…..
    makanya q bikin query sendiri……
    hehehhehehhehehehe…..

    • ardi says:

      jadi penasaran … hehe

      • angel says:

        buat function di model buat datanya. misal kek gini..
        public function images($id){

        $criteria = new CDbCriteria( array(
        ‘condition’ => ‘id = :id’,
        ‘params’ => array(‘:id’ => $id
        ) );

        return new CActiveDataProvider(‘Image’, array(
        ‘criteria’=>$criteria,
        ));
        }

        trus di view, dataProvidernya diganti kek gini..
        ‘dataProvider’=>$model->images($model->id),

  19. sabitzhabit says:

    mksd ny yg mana gan?

    • angel says:

      yg ardy bilang….
      data yg ditampilin muncul semua…..
      walo pilih salah satu kelas tapi yg muncul semua…
      ga bermaksud menjelek2an po gimana ya gan, cuma dikit koreksi doang…..
      qta makasih banget agan dah bikin postingan ilmu yg banyak n bermanfaat….

  20. sabitzhabit says:

    oh.. nanti ane cek lagi deh klo gtu gan..
    hehe, nyantai aja gan.. ga ada yg salah dg koreksi kok.. saya jga manusia bisa salah..
    thanks koreksinya gan..

  21. sabitzhabit says:

    sori gan, baru bisa kesini lagi.. lagi sibuk kerjaan..
    btw, URL yg di akses wktu agan ngeliat per kelas nya itu yg action “index” ato action “view” ya gan??
    cz ane liat2 code ny, ga salah kayaknya gan..
    ane coba di kompi ane uda berhasil jga gan..

  22. sabitzhabit says:

    coba bisa kasih liat URL yg agan akses ga?

    • angel says:

      $content=Image::model()->findByAttributes(array(‘id_content’=>$id));
      $image=new CActiveDataProvider($content);
      $this->render(‘view’,array(
      ‘model’=>$this->loadModel($id),
      ‘image’=>$image,
      ));

      itu q di satu view da 2 model….
      view image nya pake gridview bukan list view

      • dedyisnme says:

        Solusinya di Agan dimana ? Apa ada perubahan di function viewnya juga ?

        Mohon sharing contoh script untuk kasus seperti kelas dan murid ini..

        Terimakasih

  23. sabitzhabit says:

    wah, kok bisa ya?
    cz di compi ane udh bener hasilnya gan..
    itu bisa dlihat dari ada nya findByAttribute nya gan..

    • angel says:

      brarti tempaq kali gan…
      pemrograman kan emang gitu to…
      banyak jalan menuju roma…..
      tapi tempatq dah bisa c….
      tq gan…

  24. ardi says:

    akhirnya berhasil … hehe
    btw ty sabitzhabit ma angel 😀

  25. DT says:

    ane baru coba-coba nih gan,,
    untuk view, sudah bisa muncul..

    cuman masalahnya, pas ane create.
    data2 murid ga masuk ke database..itu kenapa yhh kira2 gan??

    nb: controller.php,_form.php,create.php udah ane sesuaikan ama diatas

  26. DT says:

    maap gan,, ane dah coba-coba semua nih..

    ko yng tampil semua kelas yh?

    jadi kita pilih kelas dengan ID = 1
    yang muncul semua murid..

    mohon pencerahannya gan. tq

  27. wah, ane jg bingung nih.. d kompi ane klo udah dpilih view Id sekian yg muncul itu murid pada kelas tertentu gan..

    • rudy says:

      maap gan, ane jg dpt masalah yg sama nech,

      setelah kita pilih ID = 1
      yg muncul semua murid.
      apakah ada hubungannya dengan foreign key nya ya?

      kalo coding saya ud cek semuanya, ud sama persis.
      tolong bantuannya ya gan.

    • dedyisnme says:

      Masalah saya juga sama Gan… Walaupun id kelas 1 yang dipilih tapi semua data murid dimunculkan semua dengan kelas lain

      Mungkin perlu ada perubahan di bagian controllernya, tapi saya bingung buatnya

      kayaknya perlu ada tambahan buat sortir data hanya dari kelas 1 saja

      public function actionView($id)
      {
      $kelas=Murid::model()->findByAttributes(array(‘kelas’=>$id));
      $murid=new CActiveDataProvider($kelas);

      $this->render(‘view’,array(
      ‘model’=>$this->loadModel($id),
      ‘murid’=>$murid,
      ));
      }

      Nambahinnya dimana yah ?

  28. DT says:

    gan,, mau tanya lagi.. kan tutorial disini tuh ‘CREATE’ entry data,,
    nah,,kalo ‘UPDATE’nya gimana?

    kan defaultnya kan gini

    public function actionUpdate{
    $model -> $this->loadModel($id);
    .
    .
    }

    ane rubah jadi gini
    public function actionUpdate{
    $model -> $this->loadModel($id);
    $kelas-> $this->loadKelas($id);
    .
    .
    }

    ttp ga muncul gan ..
    mohon pencerahannya ..

  29. nilai ny udah di lembar ke Jappendo ny gan?

  30. pram says:

    gan saya nyoba sudah jadi,cuma pada saat update view di tabel murid di detailnya munculinnya gmn gan..kan yang muncul cuma kelasnya gan..trus ini gan biar remove apendonya bisa sesuai dengan yang kita pilih tidak harus menghapus dari record paling bawah gmn gan…mohon pencerahan gan …sudah mentok nih…

  31. wah, saya udah lupa.. kalo ga salah utk update ada di set di jappendonya itu mas biar dia muncul..

    tapi kalo utk msalah delete per row, sepertinya jappendo emang ga nyediain fitur utk ngapus di row tertentu (ini asumsi saya, ga tau juga kalo ternyata ada pilihan utk itu..) cmiiw..

    mnurut saya klo emang banyak custom ada di wiki website yii framework utk mmbuat entry data kayak gini custom sndiri pake jquery.. saya sendiri blum prnah coba sih, tapi kyak nya itu plihan bagus..

  32. dbormamora says:

    Bit,, kalo misalnya “Kelas” nya dimasukkan duluan (tidak disimpan bersamaan pada saat create “Murid”) tuh bisa ga? jadi controller yg dipake itu “Murid”, cuma kan gw udah buat, tpi ngerror di jQuerynya..
    errmsgnya gini : jQuery(“#repeateEnum”).appendo is not a function.
    kira2 apa yg perlu dibenerin yak?
    tengs before, Bit

  33. kalo emang cuma mau ngiput kelas ny aja mending ga usah di pasang di sana jappendo nya bor..
    Cz jappendo kan di pasang disana biar bisa input murid..

  34. pram says:

    Gan mau tanya nih gan kalo bikin autonumber tp gabungan misal tabel operaso nomernya OP-0401-001
    untuk Op adalah kode operasi pake string
    untuk 0401 adalah tanggal dan bulan
    untuk 001 adalah auto numbernya gan
    biar klik baru muncul generate nomer seperti itu di text gmna gan..minta pencerahan gan?

  35. mau dimunculin langsung di text dulu apa langsung di simpen hasil ny gan?

  36. ridwan says:

    punyaku jadi kayak gini mas..?

    PHP error
    Declaration of KelasController::actionUpdate() should be compatible with that of Controller::actionUpdate()

    itu kenapa ya gan?
    apa masalahnya dikelascontrolernya ya, tepatnya actionupdate?

  37. itu kayak ny di actionUpdate nya yang salah mas..

  38. ridwan says:

    untuk kelas controller apakah harus diedit juga ya untuk actionUpdate, actionDelete? codingnya gimana ya gan? maklum masih newbie

    makasih gan?

  39. itu coding ny dari generate pake Gii atau buat sendiri gan?
    harus ny kalo udah dari generate ga ada masalah gan..

  40. ridwan says:

    PHP Error

    Declaration of KelasController::actionUpdate() should be compatible with that of Controller::actionUpdate()

    C:\xampp\htdocs\sitampan\protected\controllers\KelasController.php(4)

    01 createController(“kelas/index”)
    #2
    +
    C:\xampp\htdocs\yii\framework\web\CWebApplication.php(136): CWebApplication->runController(“kelas/index”)
    #3
    +
    C:\xampp\htdocs\yii\framework\base\CApplication.php(158): CWebApplication->processRequest()
    #4

    C:\xampp\htdocs\sitampan\index.php(13): CApplication->run()

    08 defined(‘YII_DEBUG’) or define(‘YII_DEBUG’,true);
    09 // specify how many levels of call stack should be shown in each log message
    10 defined(‘YII_TRACE_LEVEL’) or define(‘YII_TRACE_LEVEL’,3);
    11
    12 require_once($yii);
    13 Yii::createWebApplication($config)->run();

    2012-02-07 14:07:24 Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1 Yii Framework/1.1.8

    Masih tetap error mas, padahal aku sebagian copy paste aja dari contoh diatas, apa yang salah ya…makasih..

  41. ridwan says:

    dan tabel aku generate dan crude juga …

  42. wah, kalo yg dari CRUD ny juga error, mngkin ada yg gak kompatible settingan di PCnya mas..

  43. pram says:

    dimunculin di teksnya gan nomer OP-0401-001 biar klik tombol baru trus muncul di teksnya gan scripenya gmn gan kaloo pake YII…mohon pencerahan gan

  44. di blog saya ada tutor untuk membuat tampilan dinamis dengan AJAX, coba lihat itu gan..

  45. Nur Cholis says:

    gan, mau minta pencerahan

    kalo utk field nama, jenis kelamin dan kelas di view ditambahi autocomplete bisa?
    misal pas ketik nama, maka kelas dan JK akan muncul otomatis.

    kalo bisa mohon tutorialnya

    terima kasih

  46. mksd ny buat autocomplete biasa atau di jappendo ny gan?

  47. @rudy : yang pasti foreign key nya harus menyimpan informasi dari kelasnya gan..
    jadi masing-masing data murid harus ada keterangan dia punya kelas yang mana gan..

  48. iqbalsyamsu says:

    Kok nasibnya sama seperti agan angel (http://goo.gl/aoku3)

    error ‘Undefined variable: model2 ‘ ya?

    Sudah dicoba copy paste source code persis sama dengan tutorialnya, tapi masih tetep error.
    FYI, model2 jg sudah didefinisikan di bagian controller (pasti lah, namanya jg copy paste 🙂

    mohon petunjuknya ya gan.

  49. model2 akan di lempar ke form “create.php” lalu dari “create.php” akan dilempar kembali ke “_form.php” gan.. apa udah dilakukan seperti itu?

  50. iqbalsyamsu says:

    Sori gan kelupaan.

  51. dedyisnme says:

    Saya ikutin yang diatas, hasilnya kayak gini

    Kelas yang lain juga tetap muncul

  52. wah, saya benar2 minta maaf. Ternyata selama ini memang ada yang salah :
    ini diganti aja mas $murid=new CActiveDataProvider($kelas);
    menjadi :
    $haha=new CDbCriteria;
    $criteria=new CDbCriteria;
    $criteria->compare(‘kelas’,$id);

    $murid=new CActiveDataProvider(‘Murid’,
    array(‘criteria’=>$criteria,)
    );

    akan saya update juga di postingannya… mohon maaf ya..

  53. dedyisnme says:

    Sudah Bisa Gan.. Trims

    di create.php juga harus di modif kayaknya jadi :

    renderPartial(‘_form’, array(‘model’=>$model,
    ‘model2’=>$model2,)); ?>

    • dedyisnme says:

      Nanya Gan, kalo kita pengen dropdownlist ngambil data dari tabel yang lain gimana gan ? khan untuk form biasa tanpa jappendo saya bisa, tapi pas pake jappendo, kok gagal yah ..

  54. gagal gimana maksudnya gan?

    • dedyisnme says:

      Khan kalo yang contoh, parameter jenis kelamin langsung di definisikan , tapi kalo misalnya kita pengen ngambil parameter nama dari tabel user misalnya , caranya gimana ?

      Contohnya :

      findAll(),
      ‘id’, ‘nama’),array(
      ‘id’=>’username’, ’empty’=>’–Nama Anda ?–‘)); ?>

      tabel saya :

      id ->int(11)
      username -> varchar(30)
      nama ->varchar(30)

      Kalau di form biasa itu bisa di load daftar namanya, tapi di jappendo selalu error unable to change to string..

      Mohon bantuannya 😀

  55. saya buat seperti ini gan :
    findAll(),’id_obat’,’nama_obat’),
    array(’empty’=>’– Pilih Obat –‘));
    ?>

    ga error gan..

  56. eh, sory gan.. ga nge load code nya di comment.. intinya agan itu salah definisiin dropdownlistnya gan..
    coba periksa lagi code nya gan..

  57. emen says:

    bang sabit, untuk update menggunakan tampilan appendo, itu dibuat view baru terus nilai2 yg akan diupdated dilempar ke view baru tersebut? masih blom terlalu ngerti bang, maklum newbi ne

  58. Kalo untuk update, yang dilempar itu nilai nya yang mau di update gan.. dikirim semua list nilai yang mau di update..

  59. bisa pake fungsi findAll() yang ada di yii aja gan ngirimnya..

  60. brightshield says:

    Mas kalau di jappendo ditambah autocomplete ga bisa ya? Saya coba malah error

  61. iya, setau saya juga ga bisa mas..
    pake jqrel copy aja kalo ga salah bisa mas..

  62. ratna says:

    mas, makasiih tutornya. cmn sy ada masalah nich pas nyobanya.sy udah coba sesuai dengan tutornya sama persis.tp ketika nyoba masukin data.data muridnya ga bisa masuk terus ya.terutama untuk nama dan jenis kelaminnya. mohon pencerahannya

  63. biasa nya itu ga bisa masuk kalo dia ga lolos validasi nya mbak.. coba di cek di model nya apakah udah lolos validasi nya gan..

  64. Ratna says:

    oh iya bener mas. makasih ya.

  65. adam says:

    Gan pnyak saya eror padalah udah dikasih

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

    Maaf newbie 🙂

    • adam says:

      Undefined variable: model2

      C:\xampp\htdocs\test\protected\views\kelas\_form.php(32)

      20 error($model,’namaKelas’); ?>
      21
      22
      23
      24 labelEx($model,’waliKelas’); ?>
      25 textField($model,’waliKelas’,array(‘size’=>30,’maxlength’=>30)); ?>
      26 error($model,’waliKelas’); ?>
      27
      28
      29
      30 widget(‘application.extensions.appendo.JAppendo’,array(
      31 ‘id’ => ‘repeateEnum’,
      32 ‘model’ => $model2,
      33 ‘viewName’ => ‘jiakak’,
      34 ‘labelDel’ => ‘Remove Row’,
      35 // ‘cssFile’ => ‘css/jquery.appendo2.css’
      36 )); ?>
      37
      38
      39
      40 isNewRecord ? ‘Create’ : ‘Save’); ?>
      41
      42 endWidget(); ?>
      43

      ini yang salah 😦

      mohon pencerahannya

  66. Adam says:

    Udah bisa Gan
    Thanks

  67. sori mas ga cepet jawab kemarin.. lagi banyak kerjaan.. okeh, bagus lah kalo udah bisa mas..

  68. somploc says:

    mas sabit, utk action delete dan updateny gimana?
    terutama utk delete, kalo kita delete kelasnya akan error. soalny foreign key pada tabel murid ada nyangkut di tabel kelas.
    tolong d bantu controler deletenya. terima kasih mas sabit

  69. harus di delete dulu data-data tabel lain yang mengacu ke dia mas.

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

  70. somploc says:

    kalo otomatis ke delete semua sesuai kelasnya bisa mas ?

  71. bisa mas, tapi harus dibuat fungsinya mas.. pake fungsi beforeDelete aja yang ada di Yii nya mas..

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

  72. kalo ga salah saya pernah buat thread kusus utk beforesave mbak..

  73. ajeng says:

    mas sabit, boleh minta tolong gk. tolong saya d bantu tutorial untuk actionUpdate dan Delete nya, Jadi biar bisa update dan delete tabel muridnya. terima kasih sebelumnya sudah d bantu.

  74. axellya says:

    saya banyak belajar dari blog agan, makasih sebelumnya 🙂
    saya minta bimbingan dong gan buat bkin action update dan delete nya.
    biar data murid nya bisa langsung di hapus ap di edit .

  75. wah, itu lumayan panjang cara nya mbak kalo mau dibuatin.. skrg belum sempet saya mbak..

  76. Nass says:

    gan sabit , mohon dong seperti request yang lain juga tolong di share action update and deletenya juga dong

  77. Hello greetings from Argentina, I’m starting with yii and found your page and is just what I needed but to make an example of your codes I get an error Undefined variable: model2 can guide me please thanks!!

    • Hai Claudio, greeting from Indonesia..
      maybe you forget to define your $model2 variable in your controller, or you have been defined it but not pass it to your view view “render”..

      • that joy thanks for your answer! , If I knew then lol sorry now I’m trying to do the update as serious only managed to get data from model and fa model2 for help thank you very much for answering me!!

  78. paichow da great says:

    Salam sabit, mohon bantuan anda, bagaimana jika situasi jika mempunyai child yang lebih dari satu.. contonnya:

    public function actionCreate()
    {
    $model=new Kelas;
    $model2=new Murid;
    $model3=new Guru; // bagainama codingnya jika mau tambah model ini
    $model4=new lain2; // dan seterusnya tambah ini.

    ………….
    ……..

    }

    thanks so much.

  79. itu udah bener kayak gitu gan..

  80. ajobegs says:

    salam sabit, gi mana ya coding actionCreate dan actionUpdate nya jika member ada banyak dan melebihi 1, kalo ikut contoh yg mas bagi ya itu cuma 1 model sahaja iaitu class murid..g mana jika banyak class contohnya model1,model2,model3 dan seterusnya.. bisa ngak mas bagi satu examplenya? thanks

  81. klo lebih dari 2 model agan definisiin aja sama dengan cara di atas, cuma model nya ada banyak gan..

  82. ian says:

    Table Murid column kelas seharusnya foreign keynya dengan table Kelas column namaKelas ya?

  83. ian says:

    gan, klo inputan header, isiannya pengen disamping text, ga dibawah text (untuk menghemat tempat) caranya bagaimana ya?

    cth : nama kelas : |______________________|

    wali kelas : |______________________|

    • itu mainin css nya gan, utk lebih jelas agan harus pelajari css nya. Kalo ga mau repot coba lihat css bootstrap, dia uda nyediain biar ga susah buat jadi gitu.

      • ian says:

        ok siip gan, udah ane coba tinggal di copy ke form.css pake yii.css nya bootstrap

        Thanks gan 🙂 klo udah ada waktu tolong bikin panduan update & deletenya donk gan ^_^

        Thanks.

  84. Syamsul Arif says:

    Property “Murid.namaKelas” is not defined.

    gan maksud eror gt apa gan mohon bantuanya….

  85. hello am following the tutorial so far the code right, but I can not make the function create, this is my code, could you tell me what is wrong? no achievement data raise $ model 2 help! please!! thank you!!!!

    public function actionUpdate($id)
    {
    $model=new Partediario;
    $model2=new Detalle;

    $model=$this->loadModel($id);

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

    if(isset($_POST[‘Partediario’]))
    {
    $model->attributes=$_POST[‘Partediario’];
    if($model->save())
    if(isset($_POST[‘num_rollo’]))
    {
    $total = count($_POST[‘num_rollo’]);
    for ($i = 0; $i partediario_id=$model->id;
    $jiakakak->num_rollo = $_POST[‘num_rollo’][$i];
    $jiakakak->cant_cortes = $_POST[‘cant_cortes’][$i];
    $jiakakak->codseg_id = $_POST[‘codseg_id’][$i];
    $jiakakak->calidad = $_POST[‘calidad’][$i];
    $jiakakak->primmetros = $_POST[‘primmetros’][$i];
    $jiakakak->segmetros = $_POST[‘segmetros’][$i];
    $jiakakak->retmetros = $_POST[‘retmetros’][$i];
    $jiakakak->mimetros = $_POST[‘mimetros’][$i];
    $jiakakak->observacion = $_POST[‘observacion’][$i];
    $jiakakak->save();
    }
    $this->redirect(array(‘view’,’id’=>$model->id));
    }
    }
    }
    $this->render(‘update’,array(
    ‘model’=>$model,
    ‘model2’=>$model2,
    ));
    }

  86. adi says:

    kalo soal validasinya gmna gan?
    seandainya form nama ndak di isi, truz muncul pesan validasinya, itu gimana bikinnya?

  87. miqdar says:

    mas kalo “Undefined variable: select ” itu kenapa yah??

  88. anton says:

    mas sabit knp ya validasinya untuk murid gak jalan??

    maksud saya kl klik create kelas dan muridnya keluar validasi merahnya pada formnya..

    makasi

    • memang ga otomatis gitu gan.. harus di custom dlu.. agan bisa munculin pesan error nya dengan setting sendiri validasinya.. di blog ini ada tutorial untuk membuat custom validation gan..

  89. miqdar says:

    mas sabit, untuk di kolom nama saya buat dropdownlis tapi kenapa ga muncul yah?
    saya pake ini:
    echo CHtml::dropDownList(‘nama[]’,CHtml::listData (Tes::model() -> findAll(),
    ‘no’,’nama’), array(’empty’=>’–nama produk–‘));

    • kalo ga salah coba ganti ini CHtml::dropDownList(‘nama[]‘,”,CHtml::listData (Tes::model() -> findAll(),
      ‘no’,’nama’), array(‘empty’=>’–nama produk–’));

  90. wara says:

    Undefined variable: model2

    C:\xampp\htdocs\webpkl\protected\views\kelas\_form.php(33)

    21 error($model,’namaKelas’); ?>
    22
    23
    24
    25 labelEx($model,’waliKelas’); ?>
    26 textField($model,’waliKelas’,array(‘size’=>30,’maxlength’=>30)); ?>
    27 error($model,’waliKelas’); ?>
    28
    29
    30
    31 widget(‘application.extensions.appendo.JAppendo’,array(
    32 ‘id’ => ‘repeateEnum’,
    33 ‘model’ => $model2,
    34 ‘viewName’ => ‘jiakak’,
    35 ‘labelDel’ => ‘Remove Row’,
    36 // ‘cssFile’ => ‘css/jquery.appendo2.css’
    37 )); ?>
    38
    39
    40
    41 isNewRecord ? ‘Create’ : ‘Save’); ?>
    42
    43
    44 endWidget(); ?>
    45

  91. nisa says:

    mas sabit, saya sudah coba, tapi masih eror di jiakak.php bagian
    nama == null): ?>

    “nama” itu diambil dari tabel murid kan?

  92. tince says:

    mas sabit, dibagian field jappendonya saya menggunakan widget CJuiDateTimePicker, tapi pas row kedua dan seterusnya widgetnya datepickernya ga muncul..itu kira-kira kenapa ya?

    • kalo jappendo emang saya sering dengar keluhan ga bisa jalan kalo mengandung javascript, tapi saya juga belum prnah coba di jappendo utk pemecahannya.. saya pake jqqrel copy sekarang..

  93. Dwi Rachmawati Wahyuni says:

    mas sabit, kok error : Undefined variable: model2

    62 widget(‘application.extensions.appendo.JAppendo’,array(
    63 ‘id’ => ‘repeateEnum’,
    64 ‘model’ => $model2,
    65 ‘viewName’ => ‘jiakak’,
    66 ‘labelDel’ => ‘Remove Row’,
    67 // ‘cssFile’ => ‘css/jquery.appendo2.css’
    68 )); ?>
    69

    Padahal di create.php sudah didefinisikan, di action create dan update juga sudah, mohon bimbingannya.

  94. Toifur Rahman Andik says:

    Maha guru, untuk proses create nya udah oke tak ada masalah ketika pas action update data list muritnya ndak ikut kenapa ya? jadi kelas sama wali murit bisa tp untuk muridnya ndak ikut kolomnya sama kyk input baru. trims

  95. beny wijaya says:

    kalau copy sekalian sama value textfieldnya sebelum di add row gmn gan?

  96. Theo Lie says:

    bro,saya menggunakan cjuiautocomplete di dalam appendo itu
    cjuiautocomplete saya jalan untuk row yang pertama
    ketika saya add row lagi cjuiautocomplete saya tidak jalan,
    ini code di appendonya : http://pastebin.com/FGgtyVF0
    kira2 apa yg salah ya thx

  97. masbro, saya udah ikutin tutor nya tp ko murid nya cuman 1 yg masuk database… error nya gini : CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘4’ for key ‘kelas’. The SQL statement executed was: INSERT INTO `murid` (`kelas`, `nama`, `jk`) VALUES (:yp0, :yp1, :yp2)

  98. galihtama19 says:

    td saya nyoba tpi undifined ‘model2’ gmna gan ??

  99. pencaksilat says:

    Mas Sabit
    Saya lg coba namun masih ada masalah di :

    Undefined variable: model2

    \protected\views\kelas\_form.php(27)

    kira2 salahnya dimana ya mas

  100. byrz says:

    kalo misalkan tabel kelas sama murid nya di ganti jadi table pelanggan dan menupesanan trs nanti di view ada field total di ambil dari jumlah * harga, nah masukin code yg untuk ngambil total nya dimana? saya udah coba di file view nya, tp gagal

  101. Kenan Armyansyah says:

    Kalau menggunakan jappendo, kita g bisa pake custom css, atau bukan template default ya? Saya lagi pake template bootstrap. Tapi kok tombol add row nya g muncul?

Leave a comment