i有2个单独的型号(对于2个单独的表(,其中包含某些相似属性,我想将其合并到一个GridView中。模型无关。
模型1:
+----+------+----------------+-----+
| id | name | email | age |
+----+------+----------------+-----+
| 1 | Bob | bob@bob.bob | 22 |
| 2 | Ross | ross@ross.ross | 24 |
+----+------+----------------+-----+
模型2:
+----+-------+-----------------+----------+-----------+
| id | name | email | location | Interests |
+----+-------+-----------------+----------+-----------+
| 1 | Mr | mr@mr.mr | Middle | Computers |
| 2 | Robot | robot@robot.bot | Nowhere | Hacking |
+----+-------+-----------------+----------+-----------+
我想将以下数据导出到CSV(使用kartik/Grid/Gridview/ExportMenu
(,该数据与GridView类似工作:
+----+-------+-----------------+----------+-----+-----------+
| id | name | email | Location | Age | Interests |
+----+-------+-----------------+----------+-----+-----------+
| 1 | Mr | mr@mr.mr | Middle | | Computers |
| 2 | Robot | robot@robot.bot | Nowhere | | Hacking |
| 3 | Bob | bob@bob.bob | | 22 | |
| 4 | Ross | ross@ross.ross | | 24 | |
+----+-------+-----------------+----------+-----+-----------+
导出小部件的工作原理与cgridview相同。您提供dataProvider
(可能有分页(,并且导出的CSV包含所有行。
目前,我正在使用搜索模型返回2个Activedataproviders,然后将它们与ArrayDataProvider相结合:
$searchModel = new RegisteredUserSearch([$argumentsArray1]);
$dataProvider1 = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider1->pagination = ['pageSize' => 12];
$collectedEmailSearchModel = new CollectedEmailSearch([$argumentsArray2]);
$dataProvider2 = $collectedEmailSearchModel->search(Yii::$app->request->queryParams);
$dataProvider2->pagination = ['pageSize' => 12];
$data = array_merge($dataProvider1->getModels(), $dataProvider2->getModels());
$dataProvider = new ArrayDataProvider([
'allModels' => $data,
'pagination'=>[
'pageSize'=> 0
]
]);
使用$dataProvider1
或$dataProvider2
作为GridView的dataProvider
工作正常,但是使用合并的$dataProvider
导致仅导出24行。我尝试将DataProviders的pageSize
更改为0,但这似乎没有区别。
您可以在同一电子邮件中建立模型之间的关系。例如
在Model1.php中,您必须在这种情况下通过同一电子邮件定义关系
public function getSameEmail()
{
return $this->hasOne(Model2::className(),['email'=>'email']);
}
要从其他表中显示在网格视图值中,您必须在searchmodel1.php文件中加入它。您正在通过同一电子邮件加入表。
验证后,您可以将定义的关系添加到查询中。像这样
$ query-> joinwith('Sameemail'(;
您将从另一个表获得列值。请小心具有相同名称的列。