منبع اصلی نوشتار زیر در این لینک قرار دارد

به کار گیری CDbCriteria درفریمورک Yii

در فریمورک YII کلاسی به نام CDbCriteria وجود دارد که به شما امکان تولید کوئری های دلخواه تان را از طریق یک شئ می دهد. اولین چیزی که برای راحتی بیشتر کار با ActiveRecord می توانید انجام دهید زمانی است که در این فریمورک از کلاس CDbCriteria استفاده ای مناسب و کلی بکنید.

برای شروع، یک شئ از این کلاس را ایجاد می کنیم:

$criteria = new CDbCriteria();

سپس می توانید با استفاده از مشخصه های این کلاس، که در زیر مهمترین آنها فهرست شده اند،  آن را به دلخواه خود تغییر و تنظیم کنید:

مشخصهشرح
conditionبه جای بخش WHERE در کوئری
limitمشخص کننده محدودیت تعداد رکورد واکشی شده در کوئری (LIMIT)
offsetتعیین کننده نقطه شروع در بخش LIMIT در کوئری است
orderبه جای بخش ORDER BY در کوئری است
paramsمتغییر که پارامترهای مورد نیاز در آن ارسال می شوند
selectفیلدهایی که در نتیجه کوئری باید باز گردانده شوند

به غیر از مشخصه های فوق، مشخصه های دیگری از قبیل grouping و مجتمع کردن نتایج نیز هستند که می توانید آنها را با جستجو در اینترنت یا خود منابع آموزشی فریمورک به دست آورید.

به عنوان یک مثال ساده، یک کوئری ساده findByPk() می تواند به صورت زیر کاملتر شود:

$criteria = new CDbCriteria();
$criteria->condition = 'id=:id';
$criteria->params = array(':id'=>$id);
$model = Page::model()->find($criteria);

همچنین برای استفاده از findByPk() بدون ایجاد این کلاس، می توانید با استفاده از آرایه کوئری بالا را به صورت زیر باز نویسی کنید:

$model = Page::model()->find(array(
    'condition' => 'id=:id',
    'params' => array(':id'=>$id)
));

به عنوان مثالی دیگر قطعه کد زیر به عنوان بخشی از پروسه لاگین مورد استفاده قرار می گیرد:

$criteria = new CDbCriteria();
$criteria->select = 'id, username';
$criteria->condition = 'email=:email AND pass=:pass';
$criteria->params = array(':email'=>$email, ':pass'=>$pass);
$model = User::model()->find($criteria);

واکشی چنید رکورد

متد find() فقط در نتیجه یک رکورد باز می گرداند، در صورتی که نیاز به بازگرداند بیش از یک رکورد در کوئری باشد باید از متد findAll() استفاده شود. خصوصیات و رفتار این متد به صورت زیر است:

متد findAll() نتایج را اگر نتیج بیشتر از یک رکورد باشد، بوسیله یک آرایه از اشیاء باز می گرداند. اگر هیچ رکوردی را پیدا نکند، یک آرایه خالی بر می گرداند. این تفاوت این متد با find() است که آن مقدار NULL را در صورتی که رکوردی را در جواب پیدا نکند باز می گرداند.

شمارش تعداد رکوردها

برخی اوقات شما نیاز به برگرداند رکوردها در جواب ندارید، بلکه تعداد رکوردهایی را که در محدوده جستجو قرار گرفتند را می خواهید داشته باشید. برای این منظور می توانید از متد count() کلاس ActiveRecord استفاده کنید. این متد شبیه به متد find() محدوده جستجو یا همان criteria را به عنوان آرگومان اول و پارامترها را به عنوان آرگومان بعدی می گیرد.

// Find the number of "live" pages:
$criteria = new CDbCriteria();
$criteria->condition = 'live=1';
$count = Page::model()->count($criteria);

قطعه کد بالا دقیقا برابر با این کد SQL می باشد که فقط یک عدد باز می گرداند:

SELECT COUNT(*) FROM page WHERE live=1

و در حالتی که تعداد رکوردهایی که در محدوده جستجو وجود دارند برای شما مهم نبوده و فقط بخواهید از وجود رکورد در آن محدوده مطلع شوید می توانید از متد exists() به همراه criteria استفاده کنید:

$criteria = new CDbCriteria();
$criteria->condition = 'email=:email';
$criteria->params = array(':email'=>$email);
if (User::model()->exists($criteria)) {
    $message = 'That email address has already been registered.';
} else {
    $message = 'That email address is available.';
}

امیدوارم این نوشته کوتاه و مختصر، مطلبی مفدی و کاربردی بوده باشد.

The post به کار گیری CDbCriteria درفریمورک Yii appeared first on دست نوشته های یک تازه کار.



برچسب ها : , , , , , , , , , ,