Berita

Membuat Laporan dengan menjumlah rekaman tabel lain dengan method ->count(........)

11 tahun yang lalu

(oleh : Badiyanto)

Akhir dari aplikasi yang dibauat berupa keluaran dalam bentuk laporan-laporan. Laporan didapat dari beberapa perintah SQL yang merelasikan sejumlah tabel. Biasany perintah-perintah yang digunkan SELECT kolom, disertai dengan perhitungan, fungsi misal SUM(), COUNT(), dan sebagainya. Sebelum membuat laporan mari Kita buat tabel tbl_pelatihan, tbl_pes_pelat, tbl_peserta  dan isikan seperti pada skrip berikut :

CREATE TABLE `tbl_pelatihan` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `nama_pelatihan` VARCHAR(40) DEFAULT NULL,
  `instruktur` VARCHAR(40) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB;

INSERT  INTO `tbl_pelatihan`(id,nama_pelatihan,instruktur)
         VALUES  (1,'Microsofi Office','Sumanjaya'),
                 (2,'Sistem Operasi Window','Sumanjaya'),
                 (3,'Sistem Operasi LINUX','Darmono'),
                 (4,'Pemrograman Web','Harsono'),
                 (5,'Framework Yii','Badiyanto'),
                 (6,'Pemrograman Desktop Java','Badiyanto');


CREATE TABLE `tbl_pes_pelat` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `tbl_peserta_id` VARCHAR(5) DEFAULT NULL,
  `tbl_pelatihan_id` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_1` (`tbl_peserta_id`),
  KEY `FK_2` (`tbl_pelatihan_id`),
  CONSTRAINT `FK_2` FOREIGN KEY (`tbl_pelatihan_id`) REFERENCES `tbl_pelatihan` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `FK_1` FOREIGN KEY (`tbl_peserta_id`) REFERENCES `tbl_peserta` (`id`) ON UPDATE CASCADE
) ENGINE=INNODB;

INSERT  INTO `tbl_pes_pelat`(id,tbl_peserta_id,tbl_pelatihan_id)
          VALUES (1,'1001',1),(2,'1002',1),(3,'1003',1),(4,'1004',1),
                 (5,'1005',1),(6,'1001',2),(7,'1003',2),(8,'1005',2),
                 (9,'1006',2),(10,'1001',3),(11,'1002',3),(12,'1004',3),
                 (13,'1006',4),(14,'1007',4),(18,'1001',4);


CREATE TABLE `tbl_peserta` (
  `id` CHAR(5) NOT NULL,
  `nama` VARCHAR(30) DEFAULT NULL,
  `alamat` VARCHAR(30) DEFAULT NULL,
  `instansi` VARCHAR(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB;


INSERT  INTO `tbl_peserta`(id,nama,alamat,instansi)
        VALUES ('1001','Suryana','Ciamis','SMK 1 xxx'),
               ('1002','Ida Sanjaya','Yogyakarta','SMK 2 yyyy'),
               ('1003','Heri Irawana','Solo','AMIK xxxx'),
               ('1004','Meriana Hardipa','Bandung','Poltek xxx'),
               ('1005','Endang Susanti','Bantul','Poltek yyy'),
               ('1006','Edi Raharja','Sleman','AMIK hhh'),
               ('1007','Erni Susilawai','Klaten','AMIK zzz');

Langkah berikutnya buatlah model, dan controler, views  masing-masing tabel.

Tambahkan fungsi dalam model

class TblPelatihan extends CActiveRecord
{
    /**
     * Returns the static model of the specified AR class.
     * @param string $className active record class name.
     * @return TblPelatihan the static model class
     */
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    /**
     * @return string the associated database table name
     */
    public function tableName()
    {
        return 'tbl_pelatihan';
    }

 ........

// seperti di bawah ///

public function hitungJumPeserta()
 {
  return TblPesPelat::model()->count('tbl_pelatihan_id=:id',array(':id'=>$this->id));   
    }

..............

}

Perintah
return TblPesPelat::model()->count('tbl_pelatihan_id=:id',array(':id'=>$this->id));

->count(...) menghasilkan jumlah rekaman yang terdapat dalam tebl tbl_pes_pelat, lewat model/kelas TblPesPelat.php, dengan filter tbl_pes_pelat.tbl_pelatihan_id=tbl_pelatihan.id

Untuk laporan ditampilkan menggunakan kelas gridView terdapat pada bagian views/tblPelatihan/admin.php

<?php
/* @var $this TblPelatihanController */
/* @var $model TblPelatihan */

$this->breadcrumbs=array(
    'Tbl Pelatihans'=>array('index'),
    'Manage',
);

$this->menu=array(
    array('label'=>'List TblPelatihan', 'url'=>array('index')),
    array('label'=>'Create TblPelatihan', 'url'=>array('create')),
);

Yii::app()->clientScript->registerScript('search', "
$('.search-button').click(function(){
    $('.search-form').toggle();
    return false;
});
$('.search-form form').submit(function(){
    $.fn.yiiGridView.update('tbl-pelatihan-grid', {
        data: $(this).serialize()
    });
    return false;
});
");
?>

<h1>Laporan Peserta Pelatihan</h1>

<?php echo CHtml::link('Advanced Search','#',array('class'=>'search-button')); ?>
<div class="search-form" style="display:none">
<?php $this->renderPartial('_search',array(
    'model'=>$model,
)); ?>
</div><!-- search-form -->

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'tbl-pelatihan-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
   
         array(
            'name'=>'id',
            'type'=>'raw',
            'header'=>'ID',
            'value'=>'CHtml::encode($data->id)',
            'htmlOptions'=>array('width'=>'3%','style'=>'text-align:left'),
        ),
        array(
            'name'=>'nama_pelatihan',
            'type'=>'raw',
            'header'=>'PELATIHAN',
            'value'=>'CHtml::encode($data->nama_pelatihan)',
            'htmlOptions'=>array('width'=>'30%','style'=>'text-align:left'),  
        ),
         array(
            'name'=>'instruktur',
            'type'=>'raw',
            'header'=>'INSTRUKTUR',
            'value'=>'CHtml::encode($data->instruktur)',
            'htmlOptions'=>array('width'=>'30%','style'=>'text-align:left'),  
        ),
         array(
            'name'=>'instruktur',
            'type'=>'raw',
            'header'=>'JUMLAH',
            'value'=>'CHtml::encode($data->hitungJumPeserta())',
            'htmlOptions'=>array('width'=>'10%','style'=>'text-align:left'),  
        ),
       
    ),
)); ?>

perintah :
'value'=>'CHtml::encode($data->hitungJumPeserta())', adalah memanggil fungsi untuk menhitung peserta yang terdapat pada model TblPelatihan.php

Lihat hasilnya http://localhost/coba/index.php?r=tblPelatihan/admin

 Anda ingin menabahkan Total dibahas di Menambahkan Total atau Subtotal di widgets.grid.CGridView

Selamat mencoba,  masih berlanjut ...............


Berita Lainnya

Kunjungan SMK N 1 KEBUMEN
Kunjungan SMK N 1 KEBUMEN

7 tahun yang lalu

Kamis, 09 Maret 2017, sebanyak kurang lebih 72 orang siswa - siswi dari SMK N 1 KEBUMEN yang didampingi oleh Guru, berkunjung ke STMIK ...

Selengkapnya
BEDAH BUKU “Framework PHP YII 2”
BEDAH BUKU “Framework PHP YII 2”

7 tahun yang lalu

STMIK Akakom Yogyakarta, melalui UPT Perpustakaan kembali akan mengadakan acara Bedah Buku. Kali ini buku yang akan dibedah adalah "Framework ...

Selengkapnya
PENGUMUMAN PRA SKRIPSI
PRODI TEKNIK INFORMATIKA & SISTEM INFORMASI
Semester Genap T.A. 2016/2017
PENGUMUMAN PRA SKRIPSI PRODI TEKNIK INFORMATIKA & SISTEM INFORMASI Semester Genap T.A. 2016/2017

7 tahun yang lalu

Diumumkan kepada seluruh mahasiswa Prodi Teknik Informatika  STMIK AKAKOM, yang mengambil matakuliah PRA SKRIPSI pada semester Genap T.A. 2016/2017, ...

Selengkapnya