CSqlDataProvider attributeLabels

时间:2012-05-23 09:34:50

标签: php yii

<?php
//form
class SomeForm extends CFormModel
{
    public $id;
    public $user_id;

    public function search()
    {
        $sql = 'SELECT id, name FROM some_table';
        $sql_count = 'SELECT COUNT(id) FROM some_table';
        return new CSqlDataProvider($sql, array(
            'totalItemCount' => Yii::app()->db->createCommand($sql_count)->queryScalar(),                                    
            'sort' => array(
                'attributes' => array(
                    'id', 'name',
                ),                
            ),
            'pagination' => array(
                'pageSize' => 50,
            ),
        ));
    }

    public function attributeLabels()
    {
        return array(
            'id' => 'ID',
            'name' => 'NAME',            
        );
    }
}

//grid
$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider' => $model->search(), //$model = new SomeForm()    
    'columns' => array(
        'id',
        'name'
    ),
));
/*
Result:
id | name
---------
1  | John

EXPECTED Result:
ID | NAME
---------
1  | John
*/

如何为查询列设置自定义名称?

2 个答案:

答案 0 :(得分:1)

最简单的方法:

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider' => $model->search(), //$model = new SomeForm()    
    'columns' => array(
        'id::ID',
        'name::NAME'
    ),
));

另一种方式:

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider' => $model->search(), //$model = new SomeForm()    
    'columns' => array(
        array(
            'header' => 'ID',
            'name' => 'id'
        ),
        array(
            'header' => 'NAME',
            'name' => 'name',
        ),
    ),
));

Link to api doc

答案 1 :(得分:0)

如果您不想使用自定义名称;如果您想使用模型中声明的标签,那么您可以这样做:

  1. 创建模型的空实例并将其传递给视图。因此,视图将使用$dataCSqlDataProvider)以及空模型。

    $labelModel = new my_model;
    
    $this->widget('zii.widgets.CListView',array(
        'dataProvider'=>$my_model->search(), //returns a CSqlDataProvider
        'itemView'=> '_view',
        'viewData' => array('labelModel' => $labelModel),
    ));
    
  2. 使用空模型 - 与getAttributeLabel一起 - 回显标签。

  3. 使用$data['field_name']来回显数据。
  4. link有关于如何将其他模型传递到CListViewCGridView的更多信息。