Yii Framework Forum: Searching CActiveDataProvider dg 2 model - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Searching CActiveDataProvider dg 2 model Rate Topic: -----

#1 User is offline   __agus 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 166
  • Joined: 22-April 10
  • Location:Yogyakarta, Indonesia

Posted 30 December 2010 - 03:15 AM

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
0

#2 User is offline   aqge 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 188
  • Joined: 02-September 10
  • Location:Indonesia

Posted 30 December 2010 - 05:23 AM

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?
Best Regard
Tidak ada coding yang salah
Yang ada hanyalah Coding yang lebih baik
0

#3 User is offline   YII alvs 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 53
  • Joined: 11-February 10

Posted 30 December 2010 - 08:35 PM

View Post__agus, on 30 December 2010 - 03:15 AM, said:

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


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
0

#4 User is offline   fastcrash 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 245
  • Joined: 10-March 10
  • Location:South Jakarta

Posted 30 December 2010 - 11:04 PM

@ : betul
buat tambahan riset ... ;D
Searching CActiveDataProvider dg 2 model
0

#5 User is offline   __agus 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 166
  • Joined: 22-April 10
  • Location:Yogyakarta, Indonesia

Posted 31 December 2010 - 11:53 PM

View Postfastcrash, on 30 December 2010 - 11:04 PM, said:

@ : betul
buat tambahan riset ... ;D
Searching CActiveDataProvider dg 2 model


Saya coba dulu bro. Makasih banyak:D
0

#6 User is offline   __agus 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 166
  • Joined: 22-April 10
  • Location:Yogyakarta, Indonesia

Posted 01 January 2011 - 12:02 AM

View Postaqge, on 30 December 2010 - 05:23 AM, said:

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?


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
0

#7 User is offline   __agus 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 166
  • Joined: 22-April 10
  • Location:Yogyakarta, Indonesia

Posted 02 January 2011 - 09:03 PM

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
1

#8 User is offline   fastcrash 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 245
  • Joined: 10-March 10
  • Location:South Jakarta

Posted 02 January 2011 - 10:33 PM

View Post__agus, on 02 January 2011 - 09:03 PM, said:

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

Semoga bermanfaat:D


S'lamat gan!
sorting, redirect to search after edit semuanya lancar gan?
0

#9 User is offline   rianday 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 26
  • Joined: 16-December 10

Posted 03 January 2011 - 02:41 AM

View Post__agus, on 02 January 2011 - 09:03 PM, said:

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

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

#10 User is offline   __agus 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 166
  • Joined: 22-April 10
  • Location:Yogyakarta, Indonesia

Posted 03 January 2011 - 03:49 AM

View Postrianday, on 03 January 2011 - 02:41 AM, said:

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

#11 User is offline   __agus 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 166
  • Joined: 22-April 10
  • Location:Yogyakarta, Indonesia

Posted 03 January 2011 - 04:06 AM

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

array(
  'name' => 'namaLengkap',
  'value' => '$data->profil->nama_lengkap'
),

semoga berhasil
0

#12 User is offline   arsitek 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 127
  • Joined: 10-October 08

Posted 24 March 2011 - 11:55 PM

Ane kok ngak bisa ya? Posted Image
List nama memang tampil pada gridView, tapi kolom filternya ngak muncul.

Check List:
  • 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.


Apa ada yang terlewatkan ya? Posted Image
0

#13 User is offline   junxiong 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 541
  • Joined: 21-June 10

Posted 26 March 2011 - 12:52 AM

View Postarsitek, on 24 March 2011 - 11:55 PM, said:

Ane kok ngak bisa ya? Posted Image
List nama memang tampil pada gridView, tapi kolom filternya ngak muncul.

Check List:
  • 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.


Apa ada yang terlewatkan ya? Posted Image


mungkin di CGridView-nya namenya cukup tulis
'name'=>'namaLengkap',

“The most likely way for the world to be destroyed, most experts argue, is by accident. That’s where we come in; we’re computer professionals. We cause accidents.” - Nathaniel Borenstein

Yii Playground : Collaborative demo apps. You can join to improve it too!
My Team's Blog: In Indonesian.
1

#14 User is offline   arsitek 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 127
  • Joined: 10-October 08

Posted 26 March 2011 - 03:50 AM

View Postjunxiong, on 26 March 2011 - 12:52 AM, said:

mungkin di CGridView-nya namenya cukup tulis
'name'=>'namaLengkap',



Terima kasih om junxiong. field filternya udah muncul. Posted Image
Tapi tidak bisa melakukan filter. Teks apapun yang di masukkan tidak menghasilkan result apapun walaup proses loading indikatornya jalan. Kenapa lagi ya? Tq
0

#15 User is offline   arsitek 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 127
  • Joined: 10-October 08

Posted 26 March 2011 - 12:27 PM

Ternyata baris filternya tinggal di uncoment aja. Sukses! Posted Image
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users