【问题标题】:YII2 model relations output gridviewYII2模型关系输出gridview
【发布时间】:2020-05-16 01:22:43
【问题描述】:

我在yii2模型中有如下关系:

    public function getJobInfos()
    {
        return $this->hasMany(JobInfo::className(), ['ID' => 'ID']);
    }

Tbl JobInfo:

CREATE TABLE [dbo].[JobInfo](
    [ID] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
    [Parameter] [int] NULL,
    [Value] [varchar](255) NULL,
....

GridView 中对 JobInfo 的访问有效

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'ID',
            [
                'label' => 'Strings',
                'value' => function ($data) {
                    $strings = [];

                    foreach($data->jobInfos as $JobInfo) {

                        $strings[] = $JobInfo->Value;

                    }

                    return implode(',', $strings);

                },

            ],


            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?> 

现在来自 JobInfo 的所有内容都加载到字符串列中。

现在如何为集合选择新列: $JobInfo->Parameter(标签)和$JobInfo->Value(值)? 比如参数是“OrderNo”?

很遗憾,使用 Foreach 创建列不起作用。

谢谢!

【问题讨论】:

    标签: yii2


    【解决方案1】:

    $data-&gt;jobInfos 返回一个由Tbl_JobInfo 对象组成的数组

    'value' => function($data) {
        return implode(\yii\helpers\ArrayHelper::map($data->jobInfos, 'Parameter', 'Value')),
    },
    

    【讨论】:

      【解决方案2】:

      此函数现在返回列中的值。但是如果我创建了很多列,我只想构造一次数组。

                  [
                      'label' => 'column_name1',
      
                      'value' => function($model) {
                          $datareturn = $model-> jobInfos()
                              ->where(['=', 'Parameter', 'column_name1'])
                              ->one();
      
                          return  $datareturn['Value'];
                          },
      
                  ],
      

      用模型中的所有参数构建一个数组,并将其传递给控制器​​中的视图?

      【讨论】:

      • 您对 SearchModel 有什么想法吗?!如何加入 column_name1?
      【解决方案3】:

      使用类似的东西:

      索引.php

      [
      'class' => 'kartik\grid\ExpandRowColumn',
      'width' => '300px',
      'value' => function ($model, $key, $index, $column) {
          return GridView::ROW_COLLAPSED;
      },
      'detail' => function ($model, $key, $index, $column) {
          return Yii::$app->controller->renderPartial('_expandableview', ['model' => 
      $model]);
      },
      'disabled'=> function ($model, $key, $index, $column) {
                      $rows  = $model->jobInfos;
                      if (!empty($rows)) { return false;} else { return true;}
      },    
      'headerOptions' => ['class' => 'kartik-sheet-style'], 
      'expandOneOnly' => true,
      ],
      

      可扩展视图:

      <div class="Info-expandable-view">
      <table border="0" class="table transparent">
      <?php
      $rows = $model->jobInfos;
      foreach ($rows as $key => $value) {
      
      //split your columns here using
      //$myParameter = $value['Parameter'];
      //$myValue = $value['Value'];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-05
        相关资源
        最近更新 更多