از اونجایی که خروجی findAll توی AR در 1.1.14 یک آرایه است، درنتیجه یکسری کارها باید دستی توی Yii پیاده سازی بشه.

نوشته شده توسط
rezakho
چک کردن وجود کلید خاص در مجموعه
معادل Yii:
$users = User::model()->findAll('type=:type', array(':type'=>'admin'));
foreach($users as $user) {
if($user->equals(User::model()->findByPk(2)) { // or if($user->id == 2) {
...
}
}
// or
if(in_array(User::model()->findByPk(2), $users)) {
...
}
معادل Yii
User::model()->findByPk(1)->attributes;
CJSON::encode(User::model()->findByPk(1)->attributes);
$user = new User;
$user->attributes = CJSON::decode($json);
foreach($users as $user) {
...
}
این کار توی Yii با استفاده از Scopeها انجام میشه. روش معادل در Yii :
class User extends CActiveRecord {
public function scopes() {
return array(
'isAdmin'=>array('condition'=>'is_admin=:isAdmin', 'params'=>array(':isAdmin'=>1)),
);
}
}
$users = Users::model()->isAdmin()->findAll();
الصاق یک callback به هر یک از اعضای مجموعه (برای این callback هم اگر هست معادل فارسی خوبی پیشنهاد بدید)
از اونجا که در Yii خروجی findAll و... یک آرایه معمولی هست، نیازی به استفاده از callback و تعریف تابع بدون نام و... نیست. معادل Yii :
$users = User::model()->findAll();
foreach($users as $user) {
...
}
// or
while($user = each($users)) {
...
}
ضمناً معادل callback توی فارسی میشه «پاسخ به تماس» یا «تماس برگشتی» یا «تماس بازگشتی» که همون callback بگیم بهتره!
باز هم به دلیل اینکه خروجی findAll در Yii یک آرایه معمولی هست، باید از روشهای مربوط به آرایه ها استفاده کنیم. روشهای معادل در Yii :
function mySort($a, $b) {
if ($a->created_at == $b->created_at) {
return 0;
}
return ($a->created_at < $b->created_at ? -1 : 1);
}
$users = User::model()->findAll();
usort($users, 'mySort');
// or simply:
$users = User::model()->findAll(array('order'=>'created_at'));