№11 Dars — Yiida scopes bilan ishlash.
Yii ning maxsus tehnologiyasi bo`lib, sql so`rovi bilan ishlovchi shartlar majmui, bog`lanishlarni bajaruvchi va odatiy (ko`p takrorlanadigan shartlar) natijalarni topish uchun ishlatiladi.
CActiveRecord::scopes() maxsus funksiyasi. Ishlash usuli juda oddiy. Maxsus nom asosida uni filter deb atasak ham bo`ladi.
Quyidagicha «Post» jadval berilgan. Ishlarimizni shu jadval bilan olib boramiz.
| ID | status | create_time | date |
| 1 | 1 | 12:02:21 | 12.05.14 12:02:21 |
| 2 | 0 | 11:11:21 | 12.04.14 11:11:21 |
| 3 | 1 | 13:01:00 | 11.05.14 13:01:00 |
| 4 | 1 | 14:05:01 | 14.05.14 14:05:01 |
| 5 | 1 | 22:01:11 | 11.04.14 22:01:11 |
| 6 | 1 | 02:42:21 | 10.04.14 02:42:21 |
| 7 | 1 | 15:02:11 | 30.05.14 15:02:11 |
class Post extends CActiveRecord
{
…
public function scopes()
{
return array(
// bu shartda post jadvalidagi status ustuni 1 ga teng bo`lganlarni ajratadi.
'published'=>array(
'condition'=>'status=1',
),
// natijani faqat 5 tasigacha oladi va create_time bo`yicha o`sish tartibida tartiblaydi
'recently'=>array(
'order'=>'create_time DESC',
'limit'=>5,
),
// date ustunidagi datalar qiymati hozirgi vaqtdan kattalarini ajratadi
'today'=>array(
'condition'=>'date >= NOW()',
),
);
}
…
}
bu kod sql so`rovida quyidagicha bo`ladi:
select * from post where status=1 and date >= now() order by create_time desc limit 5;
bu yerdagi kodlarni qaysi birini ishlatish yoki ishlatmaslikni o`zingiz aniqlaysiz chunki shartlarni guruhlarga bo`lgansiz. Qaysidir filterni ishlatishingiz orqali sql so`rovingizda shuncha shartlar ko`payveradi.
buni ishlatish quyidagicha bo`ladi:
$posts=Post::model()->published()->recently()->findAll();
Manba:
Web Dasturlash
№11 Dars — Yiida scopes bilan ishlash.