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

Pengajian, Tahlil dan Doa Bersama Jelang Dies Natalis Akakom
Pengajian, Tahlil dan Doa Bersama Jelang Dies Natalis Akakom

7 tahun yang lalu

STMIK AKAKOM menyelenggarakan pengajian, tahlilan dan doa bersama dalam rangka  jelang Dies Natalies STMIK AKAKOM Yogyakarta ke-38. Pengajian ini ...

Selengkapnya
Momen Hardiknas, Kampus Akakom Mempersiapkan Diri Bekerjasama Dengan Industri
Momen Hardiknas, Kampus Akakom Mempersiapkan Diri Bekerjasama Dengan Industri

7 tahun yang lalu

STMIK Akakom Yogyakarta menggelar upacara bendera peringatan Hari Pendidikan Nasional, selasa (2/5/2017). Upacara yang berlangsung di halaman depan Gedung UPT STMIK ...

Selengkapnya
Jelang Dies Natalis ke-38, STMIK Akakom Mengadakan Kompetisi Bola Voli
Jelang Dies Natalis ke-38, STMIK Akakom Mengadakan Kompetisi Bola Voli

7 tahun yang lalu

Yayasan Pendidikan Widya Bakti STMIK Akakom Yogyakarta akan merayakan Dies Natalis ke-38 pada 30 Juni 2017 nanti. Menjelang hari jadi, kampus menggelar ...

Selengkapnya