تالار گفتمان nCIS.ir

نسخه‌ی کامل: مرتب کردن بر اساس تعداد رکورد های یک دسته
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام.
ببخشید استاد مرتب کردن بر اساس تعداد رکورد های یک دسته چجوریه؟
مثلا اون دسته ای که 30 رکورد داره اول باشه و به طور صودی مرتب بشن نه بر اساس ایدی و ...

<?php foreach(Categories::model()->findAll(array('order'=>'name','condition'=>'confirmed=1')) as $category) : ?>
<?php $count = Posts::model()->count('category_id=:categoryId AND confirmed=1', array(':categoryId'=>$category->id)); ?>
<li class="list-group-item-text"><a class="pull-right" href="<?php echo Yii::app()->createUrl('posts/category', array('id'=>$category->id)); ?>"><?php echo CHtml::encode($category->name); ?> </a><span class="label label-primary pull-left" style="margin: 14px 7px;"><?php echo $count; ?></span></li>
<div class="clear"></div>
<?php endforeach; ?>
فرض میکنم میخواین پستها رو بر اساس تعداد کامنتها مرتب کنید.
ابتدا این relation رو به مدل Posts اضافه کنید:
public function relations()
{
    return array(
        // ...
        'commentCount' => array(self::STAT, 'Comments', 'post_id'),
    );
}
حالا این متد رو هم به مدلتون اضافه کنید (من فرض کردم نزولی میخواین مرتب بشه. پس گفتم هرجا تعداد کامنتهای رکورد اول بیشتر از رکورد دوم بود توی مقایسه، 1- برگردونه تا جاشون عوض نشه) :
public function sortByComments($firstModel, $secondModel)
{
    if($firstModel->commentCount == $secondModel->commentCount) {
        return 0;
    }
    return ($firstModel->commentCount > $secondModel->commentCount ? -1 : 1);
}

حالا هرجا خواستین پستهاتون براساس تعداد کامنتها مرتب بشن، به این شکل کار میکنید:
if($posts = Posts::model()->with('commentCount')->findAll()) {
    usort($posts, array($posts[0], 'sortByComments'));
}