【问题标题】:yii2 Merge two data provider and show them in a gridyii2 合并两个数据提供者并在网格中显示它们
【发布时间】:2020-08-04 09:02:52
【问题描述】:

我正在尝试在网格中合并两个具有不同字段的表,但出现错误,例如我无法调用第二个表字段

表格

MovimentiCredito |ID|IDTessera|IDTipoMovCredito|IDUtente|数据|MovCredito|注意| 庞蒂运动 |ID|IDTessera|IDTipoMovPunti|IDUtente|数据|MovPunti|注意|

我的代码

 $MCdataprovider= new ActiveDataProvider([
 'query' => MovimentiCredito::find()->where(['IDTessera'=>$card->ID])->orderBy('data DESC'),
 'pagination' => [
 'pageSize' => 20,
  ],
 ]); 
 $MPdataprovider= new ActiveDataProvider([
'query' => MovimentiPunti::find()->where(['IDTessera'=>$card->ID])->orderBy('data DESC'),
'pagination' => [
'pageSize' => 20,
     ],
 ]); 
 $datamov = array_replace_recursive ( $MPdataprovider->getModels(),$MCdataprovider->getModels());
 $dataProvider_all = new ArrayDataProvider([
   'allModels' => $datamov
 ]);

网格

<?php Pjax::begin(['id' => 'Movimenti2']) ?>        
  <?php Print_r($dataProvider_all);?>
          <?php echo GridView::widget([
    'dataProvider' => $dataProvider_all,
          'columns' => [
        [
            'attribute' => 'Data',
            'format' => 'text'
        ],
              ['attribute' => 'MovPunti',
            'format' => 'text'],
 ['attribute' => 'MovCredito',
            'format' => 'text'],
                 
                   ['attribute' => 'Note',
            'format' => 'text'],
            [
            'label' => 'Cancella',
            //'attribute' => 'education',
            //'filter' => ['0' => 'Elementary', '1' => 'Secondary', '2' => 'Higher'],
            //'filterInputOptions' => ['prompt' => 'All educations', 'class' => 'form-control', 'id' => null]
                 'format' => 'raw',
            'value' => function($data) {

                        return Html::a('modifica',['movimenti/delete','id' => $data['ID'] ]);
            }
    
        ],
              ]
]);
  ?>   

        
        
          <?php Pjax::end() ?>

错误

未知属性– yii\base\UnknownPropertyException

获取未知属性:app\models\MovimentiCredito::MovPunti

如果我换了 $datamov = array_replace_recursive ($MPdataprovider->getModels(),$MCdataprovider->getModels());

如果 Punti 是第一个,我会得到不同的错误,反之亦然,但如果我打印组合的数据提供者充满数据...... 我该如何解决? 感谢您的帮助!

【问题讨论】:

  • 如果您确实需要在一个网格中拥有两个 ActiveData 源,请将它们合并,这样就会有一个源。
  • tks 的答案,但我需要使用 activedata,有没有办法使用它?
  • 我不知道如何使用 ActiveDataProvider 来做到这一点,但我想不出这里需要它的任何原因。带有union 的 SqlDataProvider 就可以了。

标签: datagridview yii2 dataprovider cactivedataprovider


【解决方案1】:

你需要使用这里看到的联合方法https://www.yiiframework.com/doc/guide/2.0/en/db-query-builder,所以根据那里的代码,你的可能会是这样的

$query1 = (new \yii\db\Query())
    ->select("ID, IDTessera, IDTipoMovCredito as IDTipoMov, IDUtente, Data, MovCredito as mov, Note")
    ->from('MovimentiCredito');

$query2 = (new \yii\db\Query())
    ->select('ID, IDTessera, IDTipoMovPunti as IDTipoMov, IDUtente, Data, MovPunti as mov, Note')
    ->from('MovimentiPunti');

$query1->union($query2);

$dataProvider_all = new ActiveDataProvider([
    'query' => $query1,
    'pagination' => [
        'pageSize' => 20,
    ],
]); 

【讨论】:

    【解决方案2】:

    用这段代码解决

       $MCdataprovider= new ArrayDataProvider ([
        'allModels' => MovimentiCredito::find()->where(['IDTessera'=>$card->ID])->asArray()->all(),
        'pagination' => [
            'pageSize' => count(MovimentiCredito::find()->where(['IDTessera'=>$card->ID])->asArray()->all()),
        ],
    ]); 
         $MPdataprovider= new ArrayDataProvider ([
        'allModels' => MovimentiPunti::find()->where(['IDTessera'=>$card->ID])->asArray()->all(),
        'pagination' => [
            'pageSize' => count(MovimentiPunti::find()->where(['IDTessera'=>$card->ID])->asArray()->all()),
        ],
    ]); 
     $datamov = array_replace_recursive ($MCdataprovider->getModels(),$MPdataprovider->getModels()); //$MPdataprovider->getModels(),$MCdataprovider->getModels());
    
    $dataProvider_all = new ArrayDataProvider([
      'key'=>'ID',
        'allModels' => $datamov,
            'sort' => [
                'attributes' => [ 'Data' ],
            ],
    ]);
    

    原因是当你使用 arraydataprovider 时你需要使用一个键来合并 感谢大家的支持!

    【讨论】:

      猜你喜欢
      • 2015-12-21
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      • 2017-07-30
      • 2017-03-31
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多