Yii2:GridView中带有attributeLabels()的标签

时间:2018-03-02 06:20:33

标签: model-view-controller gridview yii2

我生成了一个获得函数attributeLabels()的模型:

public function attributeLabels()
{
    return [
        'column1' => 'name of column1',
        'column2' => 'name of column2',
    ];
}

我还在我的模型中编写了一个函数,它创建了一个SQL语句:

public function getReminders()
{
        $sql = Yii::$app->db->createCommand('SELECT 
        [[column1]], [[column2]]
        FROM {{%table}}
        WHERE column1 > :value')
        -> bindValue(':value', '10');
        return $sql;
}

然后我创建了一个带actionIndex()函数的控制器:

public function actionIndex()
{
    $model = new TestObject();
    $testmodels= new ActiveDataProvider([
      'models' => $model->getReminders()->queryAll(),

    ]);

    return $this->render('index', [
        'testmodels' => $testmodels,
    ]);

最后我创建了一个视图

GridView::widget([
        'dataProvider' => $testmodels,
        'layout' => '{items}{pager}',
        'columns' => ['column1', column2,],
    ]); 

由于某种原因,结果页面的列名称为column1column2。我试图创建一个listView并获得列的正确名称。为什么在这种情况下attributeLabels()没有设置列名?我真的不想在gridview中使用label属性。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

我会做以下事情:

  1. 使TestObject的基类成为ActiveRecord
  2. 覆盖tableName
  3. 简化getReminders,将其设为静态,让它返回Query而不是Command

    类TestModel扩展yii \ db \ ActiveRecord {     ...

    public static function tableName()
    {
        return {{%table}};
    }
    
    public static function getReminders()
    {
        $query = self::find()->select(['column1', 'column2'])
            ->where(['>', 'column1', 10]);
        return $query;
    }    
    
    ...
    

    }

  4. 请勿设置models的{​​{1}},而是设置ActiveDataProvier

    'models'=>的TestObject :: getReminders(),