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

PESONA 2024: “Sinergi Teknologi dan Humanisme di Era 5.0” Sukses Digelar di UTDI
PESONA 2024: “Sinergi Teknologi dan Humanisme di Era 5.0” Sukses Digelar di UTDI

2 bulan yang lalu

Yogyakarta, 21 September 2024 – Acara Pengenalan Studi dan Orientasi Kampus Universitas Teknologi Digital Indonesia (PESONA UTDI) 2024 sukses digelar pada tanggal 17 hingga 20 September 2024. ...

Selengkapnya
UTDI Terima Hibah PKKM 2024, Dirikan Laboratorium Business Intelligence
UTDI Terima Hibah PKKM 2024, Dirikan Laboratorium Business Intelligence

2 bulan yang lalu

Universitas Teknologi Digital Indonesia (UTDI) kembali meraih prestasi melalui hibah Program Kompetisi Kampus Merdeka (PKKM) yang diselenggarakan oleh Direktorat Jenderal ...

Selengkapnya
UTDI Terima Hibah PKKM 2024, Fokus pada bidang Business Intelligence
UTDI Terima Hibah PKKM 2024, Fokus pada bidang Business Intelligence

2 bulan yang lalu

Universitas Teknologi Digital Indonesia (UTDI) kembali meraih prestasi melalui hibah Program Kompetisi Kampus Merdeka (PKKM) yang diselenggarakan oleh Direktorat Jenderal ...

Selengkapnya