Yii Framework Forum: [*]Relasi tabel di Yii[*] - Yii Framework Forum

Jump to content

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

[*]Relasi tabel di Yii[*] Rate Topic: -----

#1 User is offline   jerocai 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 08-December 11

Posted 15 December 2011 - 11:29 PM

Maap kalo repost sebelumnya,

to de point aja yh kk kk semua :)
kalo mau menghubungkan field beda tabel itu gimana yh di yii.. (table relasi)

misal ane punya table ( anggota dan provinsi)

anggota (1) ------------------- (n) provinsi

di tabel anggota itu isinya : id_anggota, nama, nomor_telpon, fk_id_prov
di tabel provinsi itu isinya : id_provinsi, nama_provinsi

ini di contoh view.php (anggota)
<?php
$this->breadcrumbs=array(
	'Anggota'=>array('index'),
	$model->idAnggota,
);

.
.
.
?>
<h1>View Anggota #<?php echo $model->id_province; ?></h1>

<tr class="odd">
		<th colspan="2">Data Anggota</th>
	</tr>
		<tr class="even">
			<th>Nama</td><td><?php echo $model->nama?></td>
		</tr>
		<tr class="even">
			<th>Telpon </td><td><?php echo $model->nomor_telepon?></td>
		</tr>	
		<tr class="even">
			<th>Provinsi</td><td><?php echo $model->fk_id_provinsi?></td> 
		</table>
.
.
.
<?php $this->widget('zii.widgets.CDetailView', array(
	'data'=>$model,
	'attributes'=>array(),
)); ?>


sedang untuk tampilannya jadi

Nama : Andrew
Telpon: 123456
Provinsi : 1 O0

provinsi yng kepanggil itu id dari table provinsi..
nah kalo mau munculin nama provinsi sesuai id_prov gimana yh gan??

ane dah coba $model->provinsi->nama_provinsi
tapi ttp aja gagal :hammer:

ada masukan ga gan??
thnks before .. :D
0

#2 User is offline   angela88 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 144
  • Joined: 14-October 11
  • Location:Jakarta

Posted 16 December 2011 - 12:46 AM

bikin function di model aja...
misal
public function getProvinsi($id)
		{
			$name=Provinsi::model()->find(array(
			'select'=>'name',
			'condition'=>'id_provinsi=:id',
			'params'=>array(':id'=>$id),
			));
			$name = $name->name;
			return $name;
		}


trus dipanggilnya :
echo NamaModel::model()->getProvinsi($model->fk_id_provinsi)

1

#3 User is offline   jerocai 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 08-December 11

Posted 16 December 2011 - 01:34 AM

View PostAngela Ari, on 16 December 2011 - 12:46 AM, said:

bikin function di model aja...
misal
public function getProvinsi($id)
		{
			$name=Provinsi::model()->find(array(
			'select'=>'name',
			'condition'=>'id_provinsi=:id',
			'params'=>array(':id'=>$id),
			));
			$name = $name->name;
			return $name;
		}


trus dipanggilnya :
echo NamaModel::model()->getProvinsi($model->fk_id_provinsi)



waahh.. makasi banyak mas buat pencerahannya..
:D
0

#4 User is offline   nk913 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 27
  • Joined: 14-September 11
  • Location:Jakarta

Posted 19 December 2011 - 11:38 AM

Maaf bukannya sok tau, tapi sepertinya best practice untuk relasi di Yii adalah dengan membuat relasi di Model.

Contoh:

class Anggota extends CActiveRecord
{
  ...
  public function relations()
  {
    return array(
     'provinsi'=>array(self::BELONGS_TO,'Provinsi','fk_id_prov'),
   );
  }
  ...
}


class Provinsi extends CActiveRecord
{
  ...
  public function relations()
  {
    return array(
     'anggota'=>array(self::HAS_MANY,'Anggota','fk_id_prov'),
   );
  }
  ...
}


Contoh mengakses nama propinsi dari objek anggota:

$anggota->provinsi->nama_provinsi;


Mungkin ini dapat membantu: http://www.yiiframew...-schema-design/
0

#5 User is offline   angela88 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 144
  • Joined: 14-October 11
  • Location:Jakarta

Posted 19 December 2011 - 09:46 PM

View Postnk913, on 19 December 2011 - 11:38 AM, said:

Maaf bukannya sok tau, tapi sepertinya best practice untuk relasi di Yii adalah dengan membuat relasi di Model.

Contoh:

class Anggota extends CActiveRecord
{
  ...
  public function relations()
  {
    return array(
     'provinsi'=>array(self::BELONGS_TO,'Provinsi','fk_id_prov'),
   );
  }
  ...
}


class Provinsi extends CActiveRecord
{
  ...
  public function relations()
  {
    return array(
     'anggota'=>array(self::HAS_MANY,'Anggota','fk_id_prov'),
   );
  }
  ...
}


Contoh mengakses nama propinsi dari objek anggota:

$anggota->provinsi->nama_provinsi;


Mungkin ini dapat membantu: http://www.yiiframew...-schema-design/


pengalaman pribadi, kadang itu ga berhasil...
error trying to get property of non-object...
kayanya tergantung t4 penaruhan koding itu d(kalo ga q yg error kali :P )....
kalo solusi paling singkat q kaya gini....
baru inget setelah da posting diatas...
Provinsi::model()->findByPk($model->id_provinsi)->name

0

#6 User is offline   jerocai 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 08-December 11

Posted 19 December 2011 - 11:26 PM

@nk913, @Angela Ari: thnks buat masukannya..

ane jadinya pake
Provinsi::model()->findByPK($model->id)->nama_provinsi


thnks yaa :D
0

#7 User is offline   Sanu 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 15-December 11
  • Location:Karawang, Indonesia

Posted 20 December 2011 - 02:28 AM

ikutan saran aja,
dari pengalaman ane kalau data induk dan anak-nya
sama-sama banyak apalagi ada fungsi SUM(),COUNT(),AVG()
saran dari nk913 akan lebih lama tampil-nya di gridview
dibanding saran dari angela ari.

maaf gan ini pengalaman ane di PHP murni
dan framework lain gan.
sama ga ya di Yii ini, soalnya baru mengenal.
0

#8 User is offline   hypia 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 2
  • Joined: 03-January 14

Posted 10 January 2014 - 02:16 AM

View Postangela88, on 19 December 2011 - 09:46 PM, said:

pengalaman pribadi, kadang itu ga berhasil...
error trying to get property of non-object...
kayanya tergantung t4 penaruhan koding itu d(kalo ga q yg error kali :P )....
kalo solusi paling singkat q kaya gini....
baru inget setelah da posting diatas...
Provinsi::model()->findByPk($model->id_provinsi)->name




maaf mbak itu klo munculin data provinsinya semisal lebih dr 1 codenya bagaimana??
0

#9 User is offline   dst34m 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 70
  • Joined: 07-November 12

Posted 13 January 2014 - 11:13 PM

kalo ane sih gini gan :

'eMPPROVINCE.PROVINCE_NAME',
     |              |
     |              |
     V              V
'nama_relasi.field_target',



jadi lihat di model agan di bagian yang bersangkutan, cari di bagian public function relations() yang menunjukkan relasi tabel yang dibutuhkan. berikutnya di bagian view.php di baris detailview di bagian yang bersangkutan kasih format seperti yang di atas.

misal di tabel:

anggota
id_anggota
nama_anggota
id_province


province
id_province
nama_province


seteleah di relasikan kemudian di generate biasanya format relasi pada model anggota.php nya kurang lebih seperti ini :

public function relations()

	{
		return array(
			...
			'aNGGOTAPROVINCE' => array(self::BELONGS_TO, 'province', 'id_province'),
			...
		);
	}



model province.php

public function relations()
	{
	return array(
			'aNGGOTa' => array(self::HAS_MANY, 'anggota', 'id_province'),
		);
	}



jadi nanati di view.php anggota agan :

<?php $this->widget('bootstrap.widgets.TbDetailView',array(
	'data'=>$model,
	'attributes'=>array(
            ....
           'id_province'---> diubah menjadi 'aNGGOTAPROVINCE.name_province',
            ....
?>



kalau di _form.php

<?php echo $form->dropDownListRow($model,'anggota', CHtml::listData(PROVINCE::model()->findAll(), 'id_province','name_province'),array('empty'=>'----- Pilih Propinsi -----')); ?>



semoga membantu :)
0

#10 User is offline   junior yii 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 33
  • Joined: 02-February 14

Posted 09 February 2014 - 06:38 PM

View Postdst34m, on 13 January 2014 - 11:13 PM, said:

kalo ane sih gini gan :

'eMPPROVINCE.PROVINCE_NAME',
     |              |
     |              |
     V              V
'nama_relasi.field_target',



jadi lihat di model agan di bagian yang bersangkutan, cari di bagian public function relations() yang menunjukkan relasi tabel yang dibutuhkan. berikutnya di bagian view.php di baris detailview di bagian yang bersangkutan kasih format seperti yang di atas.

misal di tabel:

anggota
id_anggota
nama_anggota
id_province


province
id_province
nama_province


seteleah di relasikan kemudian di generate biasanya format relasi pada model anggota.php nya kurang lebih seperti ini :

public function relations()

	{
		return array(
			...
			'aNGGOTAPROVINCE' => array(self::BELONGS_TO, 'province', 'id_province'),
			...
		);
	}



model province.php

public function relations()
	{
	return array(
			'aNGGOTa' => array(self::HAS_MANY, 'anggota', 'id_province'),
		);
	}



jadi nanati di view.php anggota agan :

<?php $this->widget('bootstrap.widgets.TbDetailView',array(
	'data'=>$model,
	'attributes'=>array(
            ....
           'id_province'---> diubah menjadi 'aNGGOTAPROVINCE.name_province',
            ....
?>



kalau di _form.php

<?php echo $form->dropDownListRow($model,'anggota', CHtml::listData(PROVINCE::model()->findAll(), 'id_province','name_province'),array('empty'=>'----- Pilih Propinsi -----')); ?>



semoga membantu :)


kalo relasi tiga model kayak gini bagaimana gan ? Attached File  2014-02-10_063715.jpg (34.36K)
Number of downloads: 6...contoh ngakses jabatan dari naskah gimana
0

#11 User is offline   daudtm 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 85
  • Joined: 25-April 13
  • Location:Malang

Posted 10 February 2014 - 10:05 PM

View Postjunior yii, on 09 February 2014 - 06:38 PM, said:

kalo relasi tiga model kayak gini bagaimana gan ? Attachment 2014-02-10_063715.jpg...contoh ngakses jabatan dari naskah gimana


wah, @junior_yii, mending buka thread baru deh, jangan nebeng.

thread ini kan udah selese, kesimpulannya bisa pake AR relationship (@nk913) atau hardcode (@angela88, @sanu)
dua-duanya valid, ndak ada yg paling bener, yg paling salah.
Gunakan sesuai kebutuhan di lapangan, kalo untuk data propinsi doang, saya malah lebih suka pendekatan yg hardcode. Soalnya data propinsi kan "hampir" static, kalo dibikin AR relationship jadi beban join, ntar kayak kata @sanu, makin gede data anggotanya querynya jadi berat. Soalnya join itu cross product, misalnya ada 33 propinsi, lalu ada 10,000 anggota, proses join awalnya sebelum filter by foreign key akan menghasilkan 330,000 record. gak worth it kan?
Kalo yg ditanyain @junior_yii _mungkin_ cocok pake pendekatan ini

solusi hardcode lainnya:
1. propinsi diload sebagai listOptions, contoh
$listPropinsi = array(1=>'Aceh', 2=>'Banten', dst);

2. langsung pake di viewnya (perlu antisipasi kalo2 id_province belum diisi):
<h1>View Anggota #<?php echo $listPropinsi[$model->id_province]; ?></h1>

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