Yii标准带来了表的别名别名

时间:2014-06-16 13:13:42

标签: 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";
    $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中对它们进行排序。

我想请一些建议! 非常感谢。

2 个答案:

答案 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而不是对象。