使用yii进行两次数据库排序

时间:2013-01-14 12:57:56

标签: sorting yii

我有2个型号:分类和新闻。每个新闻都有与tbl_category相关的类别。在我的新闻视图文件中,记录按desc与CActiveDataProvider排序。现在我想对数据DESC进行排序,但无法处理它。这是Category的视图文件。

<div id="newsy">
<?php $this->renderPartial('_news',array('news'=>$model->news));?>  /calling _news view
</div>

我是类别中的renderPartial视图,例如。 1(host / category / 1),它给出了与id = 1相关的所有新闻,但它没有按create_time desc排序。有没有办法显示没有DataProvider的数据?从/ views / category文件夹下面的_news.php视图。我应该在哪里更改排序?

<?php foreach($news as $news): ?>
<div class="c"><img src="../images/news/news<?php echo CHtml::encode($news>id); ?><?php echo CHtml::encode($news->image);?>" /></div>
<h2 class="n"><?php echo CHtml::link(CHtml::encode($news->name),array('news/view','id'=>$news->id)); ?></h2>
<?php echo CHtml::encode($news->shortDescription); ?>
<?php echo CHtml::link("Comments: ({$news->commentCount})",$news->url.'#comments', array ('class' => 'acom')); ?>

我想我们需要来自Controller的行动:

public function actionView($id)
{
    $this->render('view',array(
        'model'=>$this->loadModel($id),
    ));
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果您始终希望按某个字段对模型进行排序,则可以为该模型添加默认范围,并在该范围中包含“订单”参数。

例如,如果您希望始终按newscreate_time模型进行排序,则可以执行类似的操作;

class News extends CActiveRecord
{
    ...
    public function defaultScope()
    {
        $alias = $this->getTableAlias(false,false);
        return array(
            'order'=>"`$alias`.`create_time` DESC",
        );
    }
    ...
}

对于每次调用数据库,这会将order参数添加到CDbCriteria,因此您的模型将始终按create_time DESC排序。

使用getTableAlias()方法可确保始终使用正确的表别名来防止出现sql错误。