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

问题描述 投票:2回答:1

任何人都可以帮助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?

提前感谢。

ajax contenteditable yii2
1个回答
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更新数据。

© www.soinside.com 2019 - 2024. All rights reserved.