我有一种从Table1模型中的相关表中获取字段的方法:
public function getFields()
{
$sort = new CSort();
$sort->attributes = array('field1','field2');
$criteria = new CDbCriteria();
$criteria->select = "t3.xxx as field1, count(t1.id) as field2";
$criteria->alias = "t1";
$criteria->join = "inner join Table2 t2 ON t1.id_table2=t2.id";
$criteria->join .= " inner join Table3 t3 ON t2.id_table3=t3.id";
$criteria->group = "field1";
$criteria->order = "field2 desc";
$dataProvider = new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'pagination'=>array('pageSize'=>50,),
'sort'=>$sort,
));
return $dataProvider;
}
在控制器中:
public function actionListfields()
{
$dataProvider=Table1::model()->getFields();
$this->render('index_listfields',array(
'dataProvider'=>$dataProvider,
));
}
在index_listfields中:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
'field1',
'field2',
),
));
我正在使用正确的标题和28行获取Grid,这是我查询的正确大小。但我在colmuns没有得到任何结果。如果我尝试在标题中点击“#34; suposely"命令一个列,我得到一个错误说一个奇怪的事情:它说我的sql试图在sql里面的命令命令中使用别名,如下所示:
SELECT t3.field as field1, count(t1.id) as field2 FROM "Table1" "t1" inner join Table2 t2 ON t1.id_table2=t2.id inner join Table3 t3 ON t2.id_table3=t3.id GROUP BY field1 ORDER BY "t1"."field2" DESC LIMIT 50
我不知道为什么订单子句获得t1前缀,但应用程序抱怨它。
我也不知道我是否按照自己想要的方式行事。我首先尝试使用纯SQL来实现这一点。我可以带上字段的值,但是我无法在gridview中对它们进行排序。
我想请一些建议! 非常感谢。
答案 0 :(得分:1)
改变 -
$sort->attributes = array('field1', 'field2');
与
$sort->attributes = array(
'field1' => array(
'asc'=>'field1 ASC',
'desc'=>'field1 DESC',
),
'field2' => array(
'asc'=>'field2 ASC',
'desc'=>'field2 DESC',
)
);
有效。
答案 1 :(得分:0)
我也不知道我是否按照自己想要的方式行事。我先来 试图通过使用纯SQL来实现这一目标。我可以带来价值观 这些字段,但我无法在gridview中对它们进行排序。
这可能是因为SQLDataProvider返回的是Array而不是对象。