datagridview - yii2 合并两个数据提供者并在网格中显示它们
问题描述
我正在尝试将两个表与网格中的不同字段合并,但我收到一个错误,例如我无法调用第二个第一表字段
桌子
MovimentiCredito |ID|IDTessera|IDTipoMovCredito|IDUtente|数据|MovCredito|注意| MovimentiPunti |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() ?>
错误
未知属性 – <a href="http://www.yiiframework.com/doc-2.0/yii-base-unknownpropertyexception.html" rel="nofollow noreferrer">yii\base\UnknownPropertyException
获取未知属性:app\models\MovimentiCredito::MovPunti
如果我改变 $datamov = array_replace_recursive ($MPdataprovider->getModels(),$MCdataprovider->getModels());
dataprovider 的顺序如果 Punti 是第一个,我会得到不同的错误,反之亦然,但如果我打印组合的 dataprovider 充满数据....我该如何解决?谢谢您的帮助!
解决方案
用这段代码解决
$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 时,您需要使用一个键来合并 tks 所有人以获得支持!
推荐阅读
- excel - 当我运行用户表单时,我在 VBA 中收到子脚本超出范围错误
- javascript - 如何在同一个 ui-select 字段上同时应用 filter:$select.search 和 limitTo:$select.infiniteCurrentLimit?
- java - java.lang.RuntimeException:编码时出错:java.lang.ArrayIndexOutOfBoundsException:1
- javascript - 无法打印国际字符
- python - + 符号在此代码中的作用是什么?
- vb.net - 代码仅在以 3.3 到 4 之间的数字运行时显示“以优异成绩”。(非常小的程序 - 少于 25 行)
- excel - 修改 sumproduct 公式以忽略#value!在范围内
- angular - 如何在 Angular 7 中使用 Rdlc 报告
- r - 子集样本的多个标准 - R
- sql - 从 SQL 上不规则日期的集合中滚动 3 个月的总和和行数