jerocai
(Cezmed)
December 16, 2011, 4:29am
1
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
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
ada masukan ga gan??
thnks before …
Angela88
(Angela Arrie)
December 16, 2011, 5:46am
2
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)
jerocai
(Cezmed)
December 16, 2011, 6:34am
3
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…
nk913
(Anggiaj)
December 19, 2011, 4:38pm
4
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.yiiframework.com/wiki/227/guidelines-for-good-schema-design/
Angela88
(Angela Arrie)
December 20, 2011, 2:46am
5
nk913:
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.yiiframework.com/wiki/227/guidelines-for-good-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 )…
kalo solusi paling singkat q kaya gini…
baru inget setelah da posting diatas…
Provinsi::model()->findByPk($model->id_provinsi)->name
jerocai
(Cezmed)
December 20, 2011, 4:26am
6
@nk913 , @Angela Ari: thnks buat masukannya…
ane jadinya pake
Provinsi::model()->findByPK($model->id)->nama_provinsi
thnks yaa
sukses4me
(Hasannuh)
December 20, 2011, 7:28am
7
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.
syamy
(Sukirman370)
January 10, 2014, 7:16am
8
angela88:
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 )…
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??
dsteam
(Dst34m)
January 14, 2014, 4:13am
9
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
madrani
(Hanifamustafida)
February 9, 2014, 11:38pm
10
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 ? 5196
…contoh ngakses jabatan dari naskah gimana
dmukadar
(Daudmukadar)
February 11, 2014, 3:05am
11
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:
propinsi diload sebagai listOptions, contoh
$listPropinsi = array(1=>'Aceh', 2=>'Banten', dst);
langsung pake di viewnya (perlu antisipasi kalo2 id_province belum diisi):
<h1>View Anggota #<?php echo $listPropinsi[$model->id_province]; ?></h1>