Searching CActiveDataProvider dg 2 model

Hi kawan2 pengguna Yii. saya perlu bantuan nih, saya sedang membuat pencarian data dengan 2 model menggunakan CActiveDataProvider. Tetapi saya bingung bagaimana merelasikan 2 model tersebut. Berikut potongan codenya:




tabel user

------------

id_user

username

password

email


tabel profil

----------------

id_profil

nama_lengkap

tgl_lahir

alamat


pada model User.php

-----------------------------

public function search()

{

  $criteria = new CDbCriteria;

  $criteria->compare('id_user',$this->id_user);

  $criteria->compare('username',$this->username,true);

  $criteria->compare('password',$this->password,true);

  $criteria->compare('email',$this->email,true);


  return new CActiveDataProvider('User', array(

    'criteria' => $criteria,

  ));

}


pada UserController.php

------------------------------

public function actionCari() {

  $model = new User('search');

  if(isset($_GET['User']))

    $model->attributes = $_GET['User'];

			

  $this->render('/user/cari', array('model' => $model));

}


pada view cari.php

----------------------------------

Yii::app()->clientScript->registerScript('search', "

$('.search-button').click(function(){

	$('.search-form').toggle();

	return false;

});

$('.search-form form').submit(function(){

	$.fn.yiiGridView.update('inbox-grid', {

		data: $(this).serialize()

	});

	return false;

});

");

?>


<?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'=> 'cari-grid',

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

	'columns'=>array(

		'id_user',

		'username',

		'email',

		array(

			'class'=>'CButtonColumn',

		),

	),

)); ?>



saya menginginkan agar tabel profil ikut disertakan dalam pencarian data tsb. semoga pertanyaan saya dapat dipahami. Mungkin ada saran yg lebih baik.terima kasih

gan itu tablenya emang tidak ada relasi nya ya, kaya user_id di table profil gitu?

agan sudah coba pake relation di modelnya?

ingin disertakan , sebagai criteria pencarian atau ingin disertakan dalam tampilan?

kedua tabel harus ada relasi dulu, kemudian pada model ada relasi antar model

setelah kedua nya terpenuhi baru dibuat fungsi seach dengan kondisi compare dengan with

lebih detailnya chek disini :

search 2 tabel

@ : betul

buat tambahan riset [color="#FFFFFF"]…[/color] ;D

Searching CActiveDataProvider dg 2 model

Saya coba dulu bro. Makasih banyak:D

Ada gan. Maaf kalau kolomnya kurang satu harusnya ada kolom id_user di tabel profil. Kemudian relasinya seperti ini:




model User.php

public function relations()

{

  return array(

    'profil' => array(self::HAS_ONE, 'Profil', 'id_user')

  )

}


model Profil.php

public function relations()

{

  return array(

    'user' => array(self::BELONGS_TO, 'User', 'id_user')

  )

}



Yang saya tidak mengerti, di db criteria kan ada compare2 gitu nah saya ingin mengcompare 2 tabel jadi seperti ini:




dalam model User.php

public function search() {

  $criteria = new CDbCriteria;

  $criteria->compare('id_user',$this->id_user);


  // Error karna berada dalam model User.php,

  // Bagaimana supaya kolom2 profil bisa ikut di compare.

  $criteria->compare('nama_lengkap',$this->nama_lengkap);

}



Terima kasih :D

Terima kasih para master Yii. searchnya sudah bisa. Berikut ini saya share codenya:




pada model User.php

------------------------------------

class User extends CActiveRecord 

{


public $namaLengkap; // variabel u/ menyimpan nama lengkap.


public function rules()

{

  array('id_user, username, password, email, namaLengkap', 'safe', 'on'=>'search')

}


public function search()

{

  $criteria = new CDbCriteria;

  $criteria->compare('id_user',$this->id_user);

  $criteria->compare('username',$this->username,true);

  $criteria->compare('password',$this->password,true);

  $criteria->compare('email',$this->email,true);


  // Ini tambahannya

  $criteria->with = array('profil');

  $criteria->compare('profil.nama_lengkap', $this->namaLengkap);


  return new CActiveDataProvider('User', array(

    'criteria' => $criteria,

  ));

}


view cari.php

----------------------------

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

        'id'=> 'cari-grid',

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

        'columns'=>array(

                'id_user',

                'username',

                'email',

                'profil.nama_lengkap',

                array(

                        'class'=>'CButtonColumn',

                ),

        ),

)); 

?>



Semoga bermanfaat:D

S’lamat gan!

sorting, redirect to search after edit semuanya lancar gan?

gan… ane udah coba gan dengan cara ente… tapi ko ada yang gak muncul yah gan… yaitu textboxnya namaLengkap untuk serch keynya gak ada…

karena sebelumnya ane menggunakan “‘filter’=>$model” mohon pencerahannya lebih lanjut…

Maaf gan, saya belum tahu soalnya g menggunakan filter. Nanti saya coba dulu pake filter. Tapi kemungkinan karena kolom namaLengkap tidak ada di model User.

Saya tahu permasalahannya. coba pada view ‘profil.nama_lengkap’ diganti dengan array:




array(

  'name' => 'namaLengkap',

  'value' => '$data->profil->nama_lengkap'

),



semoga berhasil

Ane kok ngak bisa ya?

List nama memang tampil pada gridView, tapi kolom filternya ngak muncul.

Check List:

[list=1]

[*]Definisikan kolom tabel dari table relation pada class model


public $namaLengkap; // variabel u/ menyimpan nama lengkap.

[*]Tambahkan variable yang telah didefinisikan ke function rules() pada class model


public function rules()

{

  array('id_user, username, password, email, namaLengkap', 'safe', 'on'=>'search')

}

[*]Definisikan kolom tabel dari table relation pada class model


public function relations()

	{

		return array(

            'UsersProfile' => array(self::BELONGS_TO, 'UsersProfile', 'username')            

        );

	}

[*]menambahkan kriteria pada function search()


 $criteria->with = array('UsersProfile');

  $criteria->compare('UsersProfile.nama_lengkap', $this->namaLengkap);



[*]Memanggil nilai $namaLengkap pada view


EcdUsersProfile.namaLengkap.

atau sudah coba juga dengan:


'header'=>'Nama',

            'name'=>'UsersProfile.namaLengkap',

            'type'=>'raw',

            'value'=>'$data->UsersProfile->namaLengkap',

           // 'filter' => CHtml::activeTextField($model, 'namaLengkap'),

Masih ngak muncul juga kolom filternya.

[/list]

Apa ada yang terlewatkan ya?

mungkin di CGridView-nya namenya cukup tulis


'name'=>'namaLengkap',



Terima kasih om junxiong. field filternya udah muncul.

Tapi tidak bisa melakukan filter. Teks apapun yang di masukkan tidak menghasilkan result apapun walaup proses loading indikatornya jalan. Kenapa lagi ya? Tq

Ternyata baris filternya tinggal di uncoment aja. Sukses!

permisi gan, saya mau nannya gimana caranya buat pencarian data dari dropdown list ya ? trus kita manggil tabel datanya itu dari model yang lain, contoh pencarian itu pengajar tapi tabel dari pencarian itu dari model matrik kompetensi, itu gimana caranya ya? contohnya seperti gambar berikut 6265

1.jpg
. mohon bantuannya ya guys, terima kasih :)