Relasi HAS_ONE blum jalan

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 ^^

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'),




);




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)]

Aneh kok bisa error, sesuai tabel yang dikasih bro bhoo harusnya benar…

kecuali field id_profile hilang atau salah ketik?? :P

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 :lol:

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. :P

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.

:mellow:

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 :lol:

wallaahu ta’alaa a’laam

NB: Silahkan kunjungi http://www.indotwit.com/yiindo jangan lupa follow nasrulhamid yah! :lol: