Yii条件带来了表的订单别名

Yii条件带来了表的订单别名,yii,Yii,我有一种从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"; $c

我有一种从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,
    ));
}
在索引列表字段中:

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
            'field1',
            'field2',   
        ),
    ));
我得到的网格具有正确的标题和28行,这是我查询的正确大小。但是我在colmuns没有结果。如果我尝试在标题中单击以“suposely”对列进行排序,我会收到一个错误消息:它说我的sql试图在sql中的order命令中使用别名,如下所示:

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
我不知道为什么order子句使用t1前缀,但应用程序对此表示不满

我也不知道我是否在做我想做的事情。我首先尝试使用普通SQL来实现这一点。我可以带来字段的值,但无法在gridview中对它们进行排序

请给我一些建议! 非常感谢

我也不知道我是否在做我想做的事情。我先 试图通过使用普通SQL来实现这一点。我可以带来价值观 字段,但我无法在gridview中对它们进行排序

这可能是因为SQLDataProvider返回的是数组而不是对象。

更改-

$sort->attributes=array('field1','field2')


它可以工作。

尝试在
表1
类文件中添加一个属性作为
公共$field2
。这样的话,桌子就会有这样一个字段。谢谢库纳尔!!我快到了。在类中包含字段可以带来值。但订单还是不起作用!:(请尝试我的新答案。它现在应该可以正常工作了。库纳尔,我找到答案了!我通过从条件中删除order子句来解决问题:$CRITIES->order=“field2 desc”;我不知道为什么,但它工作了!!:)谢谢你的帮助,但它没有工作。我不得不删除订单条件:$criteria->order=“field2 desc”。
$sort->attributes = array(
    'field1' => array(
        'asc'=>'field1 ASC',
        'desc'=>'field1 DESC',
    ),
    'field2' => array(
        'asc'=>'field2 ASC',
        'desc'=>'field2 DESC',
    )
);