Terkadang mengalami kesulitan untuk mengatasi kompleksitas realasi tabel, Yii walaupan relasi bisa dilakukan dengan ORM, tetap menyediakan perintah dengan menggunakan SQL. Perintah SQL dijalankan dengan menggunakan methode $daftarBuku=Yii::app()->db->createCommand($sql)->queryAll();
isi $sql=”SELECT t1.k1, t2.k2 …. FROM t1,t2 WHERE t1.pk1=t2.pk1”
Contoh:
Buka model TblBuku.php Tambahkan fungsi berikut:
public function lihatBuku()
{
$sql='SELECT
tbl_buku.id
, tbl_buku.judul_buku
, tbl_penerbit.nama_penerbit
, tbl_pengarang.nama_pengarang
, tbl_buku.isbn_issn
FROM
kuliah.tbl_buku
INNER JOIN kuliah.tbl_penerbit
ON (tbl_buku.penerbit_id = tbl_penerbit.id)
INNER JOIN kuliah.tbl_pengarang
ON (tbl_buku.pengarang_id = tbl_pengarang.id)
ORDER BY tbl_buku.id ';
$daftarBuku=Yii::app()->db->createCommand($sql)->queryAll();
$dataProvider=new CArrayDataProvider(
$daftarBuku,array(
'keyField'=>false,
'pagination'=>array('pageSize'=>100,),
));
return $dataProvider;
}
Perintah :
$daftarBuku=Yii::app()->db->createCommand($sql)->queryAll(); menjalankan sql disimpan ke dalam varibel $daftarBuku
Kemudian tambahkan TblBukuController.php
public function actionDaftarBuku()
{
$model=new TblBuku;
$this->render('daftarBuku',array('model'=>$model,
));
}
dan bagian accessRules
public function accessRules()
{
return array(
array('allow',
// allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view','daftarBuku'),
'users'=>array('*'),
..............}
Tambahkan file daftarBuku.php dalam folder /views/tblBuku/ seperti skrip berikut:
<h1>
DAFTAR BUKU
</h1>
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'tbl-buku-grid',
'dataProvider'=>$model->lihatBuku(),
'columns'=>array(
array(
'name'=>'id',
'type'=>'raw',
'header'=>'NO',
'value'=>'CHtml::encode($data["id"])',
'htmlOptions'=>array('width'=>'3%','style'=>'text-align:left'),
),
array(
'name'=>'judul',
'type'=>'raw',
'header'=>'JUDUL BUKU',
'value'=>'CHtml::encode($data["judul_buku"])',
'htmlOptions'=>array('width'=>'30%','style'=>'text-align:left'),
),
array(
'name'=>'nama_pengarang',
'type'=>'raw',
'header'=>'NAMA PENGARANG',
'value'=>'CHtml::encode($data["nama_pengarang"])',
'htmlOptions'=>array('width'=>'30%','style'=>'text-align:left'),
),
array(
'name'=>'isbn_issn',
'type'=>'raw',
'header'=>'ISBN/ISSN',
'value'=>'CHtml::encode($data["isbn_issn"])',
'htmlOptions'=>array('width'=>'10%','style'=>'text-align:left'),
),
),
)); ?>
Lihat hasilnya
Cara kerja MVC