№14 Dars — Yiida HAS_MANY va BELONGS_TO dan foydalanish.
Yii ning bog`lanishlari bu umumiy web ilovalarimizda muhim ro`l bo`lib xizmat qiladi. Bu relation metodi Yii ning model qismida joylashgan. Biz hozirda siz bilan HAS_MANY va BELONGS_TO usullari bilan tanishib chiqamiz. Nega aynan bular? Chunki bular web ilovamizda asosiy qatnashuvchi bo`lib xizmat qiladi. Boshqa usullarni ham o`ziga yarasha tutgan o`rni bor albatta lekin bu ikkala usul ayni ko`p uchraydigan usullardan. Buni batafsil tanishish chog`ida anglab yetasiz.
Masalaning qo`yilishi: Bizga ikkita jadval berilgan shularni o`zaro BELONGS_TO va HAS_MANY bog`lanishlarni amalga oshirish.
Masalani yechilishi: Bizga quyidagicha ikkita jadval berilgan:
Bu yaratilgan jadvallarga mos model yaratishimiz kerak bo`ladi.
Birinchi usuldan foydalanish:
BELONGS_TO
Bu usulni biz kod tarzda «davlat» modeliga kiritamiz:
public function relations() { return array( 'qitaType'=>array(self::BELONGS_TO, 'Qita', 'qita_ID'), ); }
bu yerda:
‘
qitaType‘ — bog`lanish nomi,
BELONGS_TO — bog`lanish usuli,
‘
Qita‘ — bog`laniladigan jadval nomi,
‘
qita_ID‘ — bog`lanish kaliti
Agar biz controllerimizga quyidagicha kod kiritsak:
$id = 2; $model = Davlat::model()->findByPk($id); echo $model->qitaType->qita_name;
bizga OSIYO degan natija chiqadi. Bu yerda Davlat jadvalidagi ID ustuni 2 ga teng bo`lgan barcha satrni object ko`rinishida qaytaradi. Bu yerda ID si 2 ga teng bo`lgan davlatning qaysi qitaga tegishliligi olinmoqda.
SQL dagi ko`rinishi:
select qita_name from davlat inner join qita on davlat.qita_ID = qita.ID where davlat.ID = 2;
Ishlash usuli:
Endi ikkinchi usuldan foydalanish:
HAS_MANY
Bu usulni biz kod tarzda «qita» modeliga kiritamiz:
public function relations() { return array( 'davlatlar'=>array(self::HAS_MANY, 'Davlat', 'qita_ID'), ); }
Agar biz controllerimizga quyidagicha kod kiritsak:
$name = 'OSIYO'; $model = Qita::model()->findByAttributes(array('qita_name'=>$name)); foreach($model->davlatlar as $davlat) echo $davlat->davlat_name." ";
bizga Uzbekiston va Yaponiya degan natijalar chiqadi. Bu yerda Qita jadvalidagi qita_name ustuni ‘OSIYO’ ga teng bo`lgan barcha satrni object ko`rinishida qaytaradi.
SQL dagi ko`rinishi:
select davlat_name from davlat inner join qita on davlat.qita_ID = qita.ID where qita.qita_name = 'OSIYO'
Ishlash usuli:
Misollar ko`rinishida ko`rsatishga harakat qildik. Qo`llab ko`ring. Chunki baribir amaliyot kerak. Ishlash usuli juda oddiy. Keyingi darslarimizda ‘MANY_MANY’, ‘HAS_ONE’ va ‘STAT’ kabi usullarni xam ko`rsatishga xarakat qilamiz.
Manba:
Web Dasturlash
№14 Dars — Yiida HAS_MANY va BELONGS_TO dan foydalanish.