我有一个存储角色信息的表。在这个表中,我有两个字段存储来自其他表的id。
表1:id, rname, pname, idtwo, idthree
表二:id, twoname 表三:id, threename我的ClistView显示rname, pname, twoname, threename
在这个论坛的帮助下,我能够使用CListView并显示表2和表3中的名称。
我现在想要做的是能够创建一个视图,其中的信息是按twonname排序的,另一个视图中,数据是按threename排序的。
我的actionIndex是:
public function actionIndex() {
$dataProvider = new CActiveDataProvider('Staffroleprofile');
$this->render('index', array(
'dataProvider' => $dataProvider,
));
}
and my _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排序的数据。如何指定数据按表2或表3中的数据排序?
亲切的问候,
e25taki
如果model2
和model3
分别是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,则在需要关系时为每条记录运行附加查询。有关更多详细信息,请参阅CDbCriteria和CActiveDataProvider的API页面
现在一切就绪,我需要的代码是:
$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模型获得记录的句柄,然后添加排序的标准,在本例中是基于关系的。谢谢大家的帮助。我的英语学习冒险又迈出了一小步。
干杯!
e25taki