如何使用带可编辑列的Yii2网格在模型中保存数据

时间:2015-01-14 10:12:22

标签: ajax contenteditable yii2

任何人都可以帮助gridview中的可编辑列。我正在使用Yii2并坚持使用它。 我无法在我的模型中保存数据。我可以从gridview列发布。

在我的网格视图中:

$gridColumns= [
  'patient_no',
  'category_name',
  'sdv_text',
  [
    'class' => 'kartik\grid\EditableColumn',
    'attribute'=>'sdv_status',
    'pageSummary' => true,
    'editableOptions'=> [
      'header' => 'profile',
      'format' => Editable::FORMAT_BUTTON,
      'inputType' => Editable::INPUT_DROPDOWN_LIST,
      'data'=> $StatusList,
    ]
  ],
  //  'date_sdv_performed',
  [
    'class' => 'kartik\grid\EditableColumn',
    'attribute'=>'date_sdv_performed',
    'editableOptions' => [
      'header' => 'Date Sdv Performed',
      'inputType'=>\kartik\editable\Editable::INPUT_WIDGET,
      'format'=>\kartik\datecontrol\DateControl::FORMAT_DATE,
      'widgetClass'=> 'kartik\datecontrol\DateControl',
    ],
  ],
  [
    'class' => 'kartik\grid\EditableColumn',
    'attribute'=>'comments',
    'hAlign' => 'top',
    'vAlign' => 'middle',
    'width'=>'100px',
    'headerOptions' => ['class' => 'kv-sticky-column'],
    'contentOptions' => ['class' => 'kv-sticky-column'],
    'pageSummary' => true,
  ],
];
GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'layout'=>"{items}\n{pager}",
        'pjax'=>true,
        'toolbar' => [
          '{export}',
          '{toggleData}'
        ],
        'responsive'=>true,
        'hover'=>true,
        'columns' => $gridColumns
      ]);

在我的控制器操作中:

public function actionMonitoring($site_name)
  {
    $this->layout = 'sdv-carolina-main';
    $Countries      = new Countries;
    $model          = new Flagging;
    $searchModel    = new FlaggingSearch();
    $dataProvider   = $searchModel->monitoringsearch($site_name);
    $allocatedsites = new AllocatedSites;
    if (Yii::$app->request->post('hasEditable')) 
    {
      $model  = $this->findModel($model['flagging_id']);
      $out    = Json::encode(['output'=>'', 'message'=>'']);
      $post = [];
      $posted = current($_POST['Flagging']);
      $post['Flagging'] = $posted;
      if ($model->load($post)) {
        $model->save();
        $output = '';
        if (isset($posted['sdv_status'])) 
        {
          $output =  $model->sdv_status;
        }
         $out = Json::encode(['output'=>$output, 'message'=>'']); 
      }
      echo $out;
      return;
    }
    return $this->render('monitoring',
      [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
        'Countries' => $Countries,
        'model'=>$model,
        'allocatedsites' => $allocatedsites,
      ]);
  }

问题是我无法更新我的模型,因为我无法获取ID。 我只需要id来更新特定的行。如何在使用可编辑列时获取id?

提前致谢。

1 个答案:

答案 0 :(得分:2)

实际上解决方案很简单。我只需要那个特定行的id来更新那个。在我的ajax帖子里我得到了这样的东西:

Flagging[0][status] NO _csrf TlhyUm5kajAoNxgVNy0/ZCoyHApZUlNUFh0rB1gRPGoAFSIdGSAifQ== editableIndex 0 editableKey 13 hasEditable 1

并发现editableKey是该特定行的ID! 现在在我的控制器中,我写下下面给出的代码:

$_id=$_POST['editableKey'];
$model = $this->findModel($_id);

此处$_id是已发布的editableKey值,它是特定行的ID。 并使用id我使用它来获取特定模型,并根据该ID更新数据。