[Yii Framework] Get Data From CSqlDataProvider

Yah, tentunya pasti kita sering melakukan query data di aplikasi kita. Di Yii Framework sendiri sudah di sediakan yang namanya CSqlDataProvider yang dapat digunakan untuk mempermudah kita dalam melakukan query data dan menampilkannya. Permasalahannya pada CSqlDataProvider konsep nya tidak sama dengan melakukan pemanggilan model secara langsung  sehingga tidak bisa langsung di lakukan pemanggilan data lewat attributnya.

Seperti contoh, jika kita lihat code generate dari Yii Framework pada:

	public function loadModel($id)
	{
		$model=NamaModel::model()->findByPk((int)$id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

kita bisa mengakses data nya langsung di view kita dengan cara:

$model->id; atau $model->namaAttribut;

Nah, tapi jika kita menggunakan CSqlDataProvider maka kita harus melakukan sedikit modifikasi pada code kita. Misal kita melakukan query data dengan CSqlDataProvider seperti berikut:

		$sql='SELECT * FROM namaTabel order by id desc';
		$dataProvider2=new CSqlDataProvider($sql,array(
			'keyField' => 'id',
		));

Kita tidak bisa mengaksesnya secara langsung dengan cara seperti berikut:

foreach($dataProvider2->getData() as $i=>$ii)
{
	echo $ii->id;
	echo $ii->namaAttribut;
}

Tapi tenang saja, kita bisa mengaksesnya dengan memodifikasi sedikit code kita menjadi seperti berikut:

foreach($dataProvider2->getData() as $i=>$ii)
{
	echo $ii['id'];
	echo $ii['namaAttribut'];
}

Selesai… Selamat mencoba…

Semoga membantu..😀

9 Responses to [Yii Framework] Get Data From CSqlDataProvider

  1. dedy says:

    bang mohon pencerahannya🙂
    saya memiliki query tabel sebagai berikut yang saya taruh di controller saya

    $sql=”SELECT A.TKP_DESA, COUNT(A.TKP_DESA) AS COUNT FROM
    (SELECT NO, Tanggal, TKP_DESA, TKP_KECAMATAN FROM atensi
    WHERE Tanggal BETWEEN ‘$a’ AND ‘$b’) A where A.TKP_DESA=’Keniten'”;

    $dataProvider=new CSqlDataProvider($sql,array(
    ‘keyField’ => ‘NO’,
    ‘pagination’=>array(
    ‘pageSize’=>66,
    )
    ));

    $this->render(‘index’,array(
    ‘dataProvider’=>$dataProvider,’interval’=>$interval,’vilage’=>$vilage,
    ));
    1.cara untuk mengakses atribut query alias (A.TKP_DESA) itu bagaimana ya bang. alias tersebut kan tidak terhubung dengan model.
    2. cara untuk menampilkan hasil tersebut pada Clist view

    terima kasih bang mohon bantuannya

  2. perlu kamu ketahui, kalo uda pake pure sql gitu, dia ga ada lagi kaitannya sama model..
    jadi kayak ngakses query biasa.. coba di search aja di blog ini, saya udah pernah posting utk masalah ini..

  3. eh, sory.. kamu kan koment di postingan yg jelasin pake query..
    skrg kamu lihat contoh dari postingan saya. Kalo pake model kan, biasa nya field nya di akses dengan “$model->namaField” nah, kalo pake query pake “$model[‘namaField’]”

    jadi indeks array nama Field nya sesuaiin aja dg yg di query nya..

  4. dedy says:

    oke bang trims

  5. bucho says:

    wahh, berguna banget bang, trims banget yak, btw, kalau merubahnya menjadi objek model, ada cara khususnya gk? atau harus hardcode?:/

  6. Fahmi Krisna D says:

    mas mau nanya, ini saya coba query di heidi sql kan berhasil muncul sqlnya, saya pakai Yii dan punya method actiontabel5122S1()

    public function actionTabel5122S1(){
    $dataProvider=array();
    //$sql = ‘SELECT * FROM mata_kuliah’;
    $sql = (‘Select * FROM mata_kuliah where kode LIKE “___1%” OR kode LIKE “___2%”
    OR kode LIKE “___3%” OR kode LIKE “___4%”
    GROUP BY id order by semester ASC’);
    $sum_bobot_sks = Yii::app()->db->createCommand(‘Select SUM(bobot_sks) FROM mata_kuliah where kode LIKE “___1%” OR kode LIKE “___2%”
    OR kode LIKE “___3%” OR kode LIKE “___4%”
    ‘)->queryScalar();
    $sum_sks_inti = Yii::app()->db->createCommand(‘Select SUM(SKS_inti) FROM mata_kuliah where kode LIKE “___1%” OR kode LIKE “___2%”
    OR kode LIKE “___3%” OR kode LIKE “___4%”
    ‘)->queryScalar();
    $dataProvider=new CSqlDataProvider(array($sql, $sum_bobot_sks, $sum_sks_inti,array(‘keyField’=>’id’)));
    return $dataProvider;
    $this->render(‘../tabelS1/tabel5122’, array(‘dataProvider’=>$dataProvider));
    }

    terus di view/tabelS1/tabel5122 kodenya seperti ini
    getData() as $dat=>$data) { ?>

    kok pas saya ke page tabel5122 gak muncul apa-apa ya?
    mohon bantuannya, terima kasih banyak
    semoga Allah memberikan pahala buat mas sabit

  7. saya agak bingung baca code nya gan. coba di print_r data nya gan, di cetak di setiap variabel biar keliatan nilai2 nya…

  8. yofijuliani says:

    mas saya mau nampilin highchart eror “Call to a member function getData() on null in” mulu,
    kode di stecontroller nya gini mas
    public function actionStus()
    {
    $sql=’SELECT count(Nik),jenis_kelamin FROM jiwa GROUP BY jenis_kelamin’;

    $dataProvider2=new CSqlDataProvider($sql,array(
    ‘keyField’ => ‘Nik’,
    ));
    $this->render(‘stus’,array(
    ‘dataProvider’=>$dataProvider2,
    ));

    dan di view nya gini
    getData() as $i=>$ii)
    {
    $label[$i]=$ii[‘aa’];
    $nilai[$i]=(int)$ii[‘count(Nik)’];
    }

    makasih mas

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: