CListView对另一个表中的数据进行排序

时间:2013-06-08 23:19:54

标签: yii date-sorting

我有一个存储角色信息的表。在该表中,我有两个字段存储来自其他表的ID。

表一:id,rname,pname,idtwo,idthree

表二:id,twoname

表三:id,threename

我的ClistView显示rname,pname,twoname,threename

通过这个论坛帮助,我可以使用CListView并显示表2和表3中的名称。

我现在要做的是创建一个视图,其中信息按twoname排序,另一个视图,数据在threename上排序。

我的actionIndex是:

public function actionIndex() {
$dataProvider = new CActiveDataProvider('Staffroleprofile');
$this->render('index', array(
'dataProvider' => $dataProvider,
));
}

和我的_view.php是:

<h1>List of SRP's</h1>
<?php 
$dataProvider->sort->defaultOrder='rname ASC'; 
?>

<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
)); ?>    

所以上面给出了从表1中的rname排序的数据。我如何指定我希望数据按表二或三中的数据排序?

亲切的问候,

e25taki

2 个答案:

答案 0 :(得分:0)

如果model2model3分别是Staffroleprofile中表2和3的关系,请将其添加到您的代码中

$dataProvider = new CActiveDataProvider('Staffroleprofile');
$criteria=new CDbCriteria;
$criteria->together=true;
$criteria->with=array('model2','model3');
$dataProvider->criteria=$criteria;
$dataProvider->sort->defaultOrder='model2.twoname ASC';

CDbCriteria::together指定是否应使用连接运行查询。如果设置为false,则在需要关系时为每条记录运行其他查询。有关更多详细信息,请转到CDbCriteriaCActiveDataProvider

的API页面

答案 1 :(得分:0)

现在一切都很好,我要求的代码是:

$dataProvider = new CActiveDataProvider('Staffroleprofile');
$criteria=new CDbCriteria;
$criteria->together=true;
$criteria->with=array('sitename','businessname');
$dataProvider->criteria=$criteria;
$dataProvider->sort->defaultOrder='sitename.site ASC';
$this->render('index_bysite', array(
        'dataProvider' => $dataProvider,
));

因此,您可以获得来自Staffrleprofile模型的记录,然后添加排序条件,在这种情况下,它基于关系。 谢谢大家的帮助。我的Yii学习冒险中的另一个小步骤。

干杯!

e25taki