(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 ...............