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

Semarak Ramadhan, STMIK Akakom Bagi Hidangan berbuka puasa Gratis ke Mahasiswa STMIK Akakom.
Semarak Ramadhan, STMIK Akakom Bagi Hidangan berbuka puasa Gratis ke Mahasiswa STMIK Akakom.

4 tahun yang lalu

Jumat 24 April 2020 merupakan jadwal awal puasa 1 Ramadhan 1441 Hijriah. Ramadhan adalah salah satu bulan yang mulia bagi umat Islam yang selalu ...

Selengkapnya
Kursus via Daring, STMIK Akakom Kerja Sama dengan Coursera
Kursus via Daring, STMIK Akakom Kerja Sama dengan Coursera

4 tahun yang lalu

STMIK Akakom bekerja sama dengan Coursera untuk melakukan kursus via daring. Ini dilakukan sebagai penunjang kegiatan pembelajaran ditengah pandemi Covid-19. ...

Selengkapnya
Bantuan 230 Masker Buatan Mahasiswa STMIK Akakom untuk Ojol GRAB
Bantuan 230 Masker Buatan Mahasiswa STMIK Akakom untuk Ojol GRAB

4 tahun yang lalu

Kamis, 23 April 2020 STMIK Akakom memberikan bantuan 230 masker kepada Grab Indonesia. Bantuan ini diterima langsung oleh Manajer Kota Grab Indonesia Regional ...

Selengkapnya