bhoo-day
(Deerawan)
1
halo2,
ak mau nanya tentang relasi HAS_ONE. Ak punya dua tabel yaitu User dan Profile dengan schema
User
=====
id_user
nama_user
id_profile
Profile
=========
id
nama_profile
User hanya boleh memiliki satu profile dan satu profile bisa dimiliki oleh banyak user.
User memiliki foreign key id_profile yang mengacu ke field id dari tabel Profile. Maka di model AR-nya ak bikin seperti dibawah ini
User.php
return array(
'profile' => array(self::HAS_ONE, 'Profile', 'id'),
);
Profile.php
return array(
'users' => array(self::BELONGS_TO, 'User', 'id_profile'),
);
Lalu ak mencoba untuk melakukan test dengan membuat query di controller dibawah ini
$userModel = User::model()->findByPk(4);
echo $userModel->id_profile . ' ters ';
echo $userModel->profile->nama_profile;
untuk echo yg pertama keluar dan hasilnya benar tapi yg kedua untuk dapetin nama profile ga keluar hasilnya. Kira2 salah dimana ya?
Terima kasih atas bantuannya ^^
nasrul
(Nasrul Hamid)
2
prediksi: fk yang digunakan pada relasu User->Profile harusnya fk dari User, yakni id_profile.
User.php
return array(
'profile' => array(self::HAS_ONE, 'Profile', 'id_profile'),
);
bhoo-day
(Deerawan)
3
klo ak ganti menjadi id_profile yg muncul malah error mas nasrul
CDbCommand gagal menjalankan pernyataan SQL: SQLSTATE[HY000]: General error: 10007 Invalid column name ‘id_profile’. [10007] (severity 5) [(null)]
junxiong
(Garry3peace)
4
Aneh kok bisa error, sesuai tabel yang dikasih bro bhoo harusnya benar…
kecuali field id_profile hilang atau salah ketik?? 
nasrul
(Nasrul Hamid)
5
sorry ke soal:
jadi di sini yang unik adalah profilenya yah?? sehingga menurut ana relasinya menjadi User BELONGS_TO Profile
user.php
return array(
'profile' => array(self::BELONGS_TO, 'Profile', 'id_profile'),
);
sedangkan Profile–>User relasinya adalah Profile HAS_MANY User
Profile.php
return array(
'users' => array(self::HAS_MANY, 'User', 'id_profile'),
);
sedangkan HAS_ONE sebenarnya adalah relasi HAS_MANY namun paling banyak memiliki hanya satu. lihat http://www.yiiframew…ng-relationship
wallaahu ta’ala a’laam coba deh semoga membantu 
bhoo-day
(Deerawan)
6
Hoho, iya ya…bisa juga dibalik seperti itu ya. Coba nanti ak balik logika relationship-nya klo udah di rumah.
Mungkin gara2 dari kalimat bahasa indo-nya ak terjemahin jadi kata2 relationship has one dan belongs to
User hanya boleh memiliki satu profile dan satu profile bisa dimiliki oleh banyak user.
diterjemahin jadi
User HAS ONE profile dan profile BELONGS TO user
Berarti klo yg HAS_ONE itu artinya si profile hanya boleh dimiliki oleh tepat satu user ya.
Ok deh…nanti tak coba dlu. Mudah2an bisa.
Thx bro Nasrul. Mohon bimbingannya, masih newbie. 
xicath
(Xicath)
7
hmm… mungkin cara bacanya bisa juga dari kanan -> kekiri -> trus ke tengah.
exm (Dibaca dari model Profile):
'users' => array(self::HAS_MANY, 'User', 'id_profile'),
id_profile(paling kanan) -> HAS_MANY(paling kiri) -> User(tengah)
brarti :
id_profile punya banyak di table user.

nasrul
(Nasrul Hamid)
8
hanya meluruskan:
udah mirip banget dengan contoh http://www.yiiframework.com/doc/guide/database.arr#declaring-relationship
sehingga struktur tabel harusnya:
User Profile
===== =========
id_user (PK) 1----1 id_user(PK,FK)
nama_user nama_profile
dan relationnya menjadi:
User.php
User HAS_ONE profile
'profile'=>array(self::HAS_ONE,'profile','id_profile'),
Profile.php
a Profile BELONGS_TO User
'user'=>array(self::BELONGS_TO,'user','id_profile'),
Deklarasi relational di atas "tidak perlu" dilakukan di kedua model, cukup pada model dari mana kita akan memanggil record
Adapun jika kita mekatakan
atau dengan kata lain satu profile dapat digunakan oleh banyak user, maka struktur tabelnya mas @bhoo-day sudah pas 
wallaahu ta’alaa a’laam
NB: Silahkan kunjungi http://www.indotwit.com/yiindo jangan lupa follow nasrulhamid yah! 