№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.