将数据库中的值(ID)添加到yii2中的操作按钮

时间:2017-10-13 08:49:22

标签: php mysql yii2 yii2-advanced-app yii2-model

我正在尝试在来自数据库的ActionColumn按钮上添加ID。我找到了答案,但我似乎没有找到答案。这是我的代码:

    <?= 

       GridView::widget([
       'dataProvider' => $dataProvider,
       'columns' => [
                'ID',
                'Job Post',
                'Email',
                'Date Added',
                 ['class' => 'yii\grid\ActionColumn',
                    'header'=>'Action',
                    'template' => '{search}',
                    'buttons' => [
                           'search' => function ($model) {
                                return Html::button('<i class="fa fa-search" aria-hidden="true"></i>', ['value' => $model->ID]);

            }
            ]
      ],
    ],
      'tableOptions' =>['class' => 'table table-bordered table-hover'],

    ]); 

    ?>

说实话,我是Yii2的新手。我刚刚在yii2的文档中看到了如何从数据库中显示列表,这就是我提出上述代码的原因。

但是我收到了错误

  

“试图在非对象上获得财产”

特别是$model->ID所在的行。

请帮忙。

更新:以下是我从数据库获取数据的方法。我正在使用SqlDataProvider

    $dataProvider = new SqlDataProvider ([
                  'sql' => 'SELECT a.user_jobpost Job Post,
                 b.email Email,
                 a.user_job_id ID,
                 a.user_job_date Date Added
                   FROM users_jobpost a,
                        user b 
                        WHERE b.id = a.user_id'  )];

以下是我使用时显示的内容 var_dump($model)

string(55) "/jobposter/backend/web/index.php?r=site%2Fsearch&id=0"

2 个答案:

答案 0 :(得分:0)

如果您使用SqlDataProvider,则无法将数据作为对象访问,而是作为数组访问

$model->ID

$model['ID']

答案 1 :(得分:0)

我看到你对表格行中的属性感到困惑。您正尝试在列数组

中使用表行的属性instate

首先,您需要使用yii的gii工具创建模型类和数据库表的搜索类。让模型的名称是Jobpost.php,搜索是JobpostSearch.php

在模型中,您可以看到在rules()函数的数据库表中定义的表行,以及在attributeLabels()函数中的属性。您可以在model

的attributeLabels()函数中将属性值更改为您想要的值
public function rules()
{
    return [
        [['id'], 'required'],
        [['job_post'], 'string'],
        [['email'], 'string'],
        [['date'], 'safe'],
    ];
}
public function attributeLabels()
{
    return [
        'id' => Yii::t('app', 'ID'),
        'job_post' => Yii::t('app', 'Job Post'),
        'Email' => Yii::t('app', 'Email'),
        'date' => Yii::t('app', 'Date Added'),
    ];
}

然后创建控制器文件并创建操作

class JobpostController extends Controller
{
     public function actionShow()
     {
          $searchModel = new JobpostSearch();
          $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

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

    }
}

然后在视图文件夹中创建index.php并编写此代码

GridView::widget([
   'dataProvider' => $dataProvider,
   'columns' => [
            'id',
            'job_post',
            'email',
            'date',
             ['class' => 'yii\grid\ActionColumn',
                'header'=>'Action',
                'template' => '{search}',
                'buttons' => [
                       'search' => function ($model) {
                            return Html::button('<i class="fa fa-search" aria-hidden="true"></i>', ['value' => $model->ID]);

        }
        ]
  ],
],
  'tableOptions' =>['class' => 'table table-bordered table-hover'],

]); 

注意:列中的值必须与模型jobpost.php

中的规则函数中定义的一样