№11 Dars — Yiida scopes bilan ishlash.

№11 Dars — Yiida scopes bilan ishlash.

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