Berita

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

13 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

Perkuat Transformasi Digital dan Ekosistem Smart City, Pemerintah Kabupaten  Banjar Jalin Kerja Sama Strategis dengan UTDI
Perkuat Transformasi Digital dan Ekosistem Smart City, Pemerintah Kabupaten Banjar Jalin Kerja Sama Strategis dengan UTDI

satu hari yang lalu

YOGYAKARTA– Dalam upaya mempercepat transformasi digital pemerintahan dan memperkuat ekosistem Kota Cerdas (Smart City), Pemerintah Kabupaten Banjar melakukan kunjungan kerja ...

Selengkapnya
UTDI dan Pemerintah Kota Pekalongan Perkuat Kolaborasi, Dorong Peningkatan Kompetensi ASN dan Transformasi Digital
UTDI dan Pemerintah Kota Pekalongan Perkuat Kolaborasi, Dorong Peningkatan Kompetensi ASN dan Transformasi Digital

3 hari yang lalu

PEKALONGAN – Universitas Teknologi Digital Indonesia (UTDI) memperkuat sinergi dengan Pemerintah Kota Pekalongan melalui penandatanganan dua Perjanjian Kerja Sama (PKS) yang ...

Selengkapnya
Press Release Sedaap In Campus UTDI 2026
Press Release Sedaap In Campus UTDI 2026

5 hari yang lalu

Kampus Universitas Teknologi Digital Indonesia jadi salah satu titik pembuka rangkaian Sedaap In Campus Jogja 2026 menuju Come See Mie JogjaUniversitas ...

Selengkapnya