Relasi ke Tabel yg Sama

Halo semuanya,

Saya masih baru nih dalam dunia persilatan Yii. Ini sebenarnya sudah diposting di forum general link tapi blum ada yg balas :( Siapa tau teman2 disini ada yg pernah menyelesaikan masalah ini.

Kira2 gimana ya biar bisa menampilkan nama parent di CGridView maupun di halaman View jika tabelnya seperti itu.


TABLE SPESIALIS

id_spesialis

nama_spesialis

parent_id_spesialis (refer ke id_spesialis)

Apakah perlu dibuat relasi? Relasi seperti apa ya klo kasusnya seperti itu.

Terima kasih




'value'=>Spesialis::model()->findByPk($model->parent_id_spesialis)->nama_spesialis,



itu pk di tabel spesialis

atau…?




parent_id_spesialis [i](reference to id_spesialis itself)[/i]



relasi antar 2 tabel atawa 1 tabel…? ?? ??? :blink:

terima kasih mas atas penjelasannya. Ak sebenernya sudah pakai cara itu tapi yg keluar di kolom tersebut nilainya malah nilai parent-nya.

sebenernya tabel-nya cuma 1 yaitu tabel spesialis itu. Nah, klo digambarkan maka setiap spesialis punya sub spesialis dan si sub spesialis itu disimpan di tabel spesialis itu sendiri.

Nah ak bingung pas saat mo ditampilin di CGridView. CGridView kan otomatis menampilkan nilai dari parent_id_spesialis. Ak udah coba buat codingan di CGridView-nya dengan cara




<?php $this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'spesialis-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'columns'=>array(

		'id_spesialis',

		'nama_spesialis',

		'parent_id_spesialis',

        array(

            'name'=>'parent_id_spesialis',

            'filter'=>CHtml::listData(Spesialis::model()->findAll(), 'id_spesialis', 'nama_spesialis'),

            'value'=>Spesialis::model()->findByPk($model->parent_id_spesialis)->nama_spesialis,

        ),

		array(

			'class'=>'CButtonColumn',

		),

	),

)); ?>



Ak curiganya di variabel ‘name’=>‘parent_id_spesialis’ yg jadi masalahnya. Kira2 gimana ya?

Terima kasih :)

waduh… bingungin bos… :lol:

grouping id atau gimana ?

maklum otaknya dah lemot dah sore…




'value'=>Spesialis::model()->findByPk($model->parent_id_spesialis)->nama_spesialis,



in findbypk nya bukan seharusnya id_spesialis ?




findByPk($model->id_spesialis)



???

ana belum pernah customisasi CGridView, namu kalau relasi pada model SPESIALIS mungkin seperti ini:




<?php 

...

public funtion relations(){

return array(

   //refers to parent key

   'parentItem' => array(self::BELONGS_TO, 'spesialis', 'parent_id_spesialis'),

   //break down into subItems

   'subItems' => array(self::HAS_MANY, 'spesialis', 'parent_id_spesialis'),

);

}

?>



kalau untuk CGridViewnya mungkin seperti ini:




<?php

...

'value'=>$model->subItems->nama_spesialis,

...

?>



semoga membantu :)

kenapa juga di relasi in kalau fieldnya ada d tabel tersebut .

bukanya bisa langsung :




'value'=>$data->nama_spesialis,



harusnya sih beda :?

‘value’=>$data->nama_spesialis nampilin nama spesialis untuk record tersebut,

sedangkan setelah di relasiin ‘value’=>$model->subItems->nama_spesialis nampilin nama sub-spesialisnya

kurang lebih begitu yang ana pahami. kalau ada yang luput, ana mohon maaf berhubung untuk CGridView ana kurang ilmu :D

wallaahu ta’ala a’laam

ha ha haa,

bisa aja mas nasrul, yang paling senior di sini ko, join apr 2009 ;D the former…

btw, itu has_many bukan berarti recordnya lebih dari satu…?

hmm…menarik juga tampaknya. Ak mungkin akan coba dlu bikin relations seperti yg disarankan mas nasrul.

Sebenernya cuma mau nampilin nama spesialis parent-nya di gridview berdasarkan parent_id_spesialis yang dipunya. Jadi kira2 begini hasilnya di gridview

id spesialis | Nama Spesialis | Nama parent spesialis

1 | Hunter | Kategori Utama

2 | Hunter Keren | Hunter

3 | Hunter Mantap | Hunter

Tapi akan dicoba dulu saran2 diatas. Thx buat bro fastcrash dan bro nasrul

hmm… klo menurutku bisa dibuat suatu fungsi berhubung datanta berupa array.

bisa jadi kaya gini :

di model:




public function parenting($parenting)

{

$result = SPESIALIS::Model()->findAll(array('condition'=>'parent_id_spesialis=\''.$parenting.'\''));


$row_parent = '';

foreach($result as $item){

$row_parent .= $item->nama_spesialis . "<br />";

}


return $row_parent;

}



di view :




array(

...


'value'=>'$data->parenting($data->parent_id_spesialis)',


...

),


semoga bisa membantu..






hehe, former but least :lol:

buktinya ana salah persepsi kirain mau munculin subitems di kolom parent_speseialis :P

kalau recordnya seperti itu, ana setuju dengan mas @fastcrash. :D




<?php

...

'value'=>Spesialis::model()->findByPk($data->parent_id_spesialis)->nama_spesialis,

...

?>



atau jika dengan relasi, bisa pakai yang BELONGS_TO (parentItem)




<?php

...

'value'=>$data->parentItem->nama_spesialis,

...

?>



wallaahu ta’aala a’laam

Solved!

Akhirnya bisa juga berkat bantuan bro nasrul dan bro fastcrash. Yg aku lakuin adalah




...

...

...

	'columns'=>array(

		'id_spesialis',

		'nama_spesialis',

        array(

            'name' => 'parent_id_spesialis',

            'filter' => Spesialis::model()->findParents(), // fields from country table

            'value' => 'Spesialis::model()->FindByPk($data->parent_id_spesialis)->nama_spesialis',

        ),

	array(

           'class'=>'CButtonColumn',

	),

	),

)); ?>

...

...

...



Ternyata bisa langsung begitu ya. Hehehe…mantap

sip… :lol: