yii2更改gridview模型

问题描述:

我正在维护一个带有模型和子记录网格的表单。我想让网格显示孩子的网址,而不是父网址。yii2更改gridview模型

我有两个共享父子关系的数据库表。我只展示了重要的领域。

describe ops; 
+---------------+--------------+ 
| serial_number | int(11)  | 
+---------------+--------------+ 
describe opsitem; 
+---------------+--------------+ 
| opsitem_id | int(11)  | 
| ops_id  | int(11)  | # foreign key 
| serial_number | int(11)  | 
+---------------+--------------+ 

在我的控制,我显示行动形式,然后为孩子记录创建一个ActiveRecord - Opsitem

class OpsController extends Controller 

    public function actionUpdate($id) 
    { 
     $model = $this->findModel($id); 


     if ($model->load(Yii::$app->request->post()) && $model->save()) { 
      return $this->redirect(['view', 'id' => $model->ops_id]); 
     } else { 

      $searchModel = new OpsitemSearch(); 
      $dataProvider = $searchModel->search(
       ['OpsitemSearch' => ['ops_id' => $model->ops_id]] 
      ); 

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

我的表单包含OPS(父),然后将含有一格表单字段oppsitem(子)记录在网格上的“更新”按钮

// $model is Parent - Ops 
<?php echo $this->render('_form', [ 
    'model' => $model, 
]) ?> 
// $searchModel is Opsitem - Child 
<?php echo GridView::widget([ 
      'dataProvider' => $dataProvider, 
      'columns' => [ 
       'ops_item_id', 
       'ops_id', 
       'serial_number' 
       [ 
        'class' => 'yii\grid\ActionColumn', 
        'template' => '{update}{delete}', 
       ], 
      ], 
     ]); ?> 

点击指向我url

/OPS /更新?ID = 1234

我想

/opsitem /更新?ID = 1234

您需要为变更控制器添加controller属性。 Like as,

<?php echo GridView::widget([ 
      'dataProvider' => $dataProvider, 
      'columns' => [ 
       'ops_item_id', 
       'ops_id', 
       'serial_number' 
       [ 
        'class' => 'yii\grid\ActionColumn', 
        'template' => '{update}{delete}', 
        'controller' => 'opsitem', 
       ], 
      ], 
     ]); ?> 
+0

谢谢。我在文档(http://www.yiiframework.com/doc-2.0/yii-grid-actioncolumn.html)中看到它(现在),但不会发现它。 – crafter

您可以自定义gridview按钮。例如,

'template' => '{update} {delete}', 
'buttons' => [ 
      'update' => function ($url, $model) { 
        return Html::a('Update',\Yii::$app->getUrlManager()->createUrl(['/opsitem/update', 'id' => 1234]),['class' => 'any class']); 
        }, 
      ], 
+0

谢谢,@ GAMITG的解决方案更多,呃,优雅,但这也是一个非常实用的方法。 – crafter