我有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,但这似乎没有什么区别。
答案 0 :(得分:0)
您可以在同一封电子邮件中建立模型之间的关系。例如
在Model1.php中,您必须通过相同的电子邮件
定义关系public function getSameEmail()
{
return $this->hasOne(Model2::className(),['email'=>'email']);
}
要在其他表格中显示网格视图值,您必须将其加入searchModel1.php文件中。您正通过同一封电子邮件加入表格。
验证后,您可以添加您定义的关系以进行查询。喜欢这个
$查询 - > joinWith( 'sameEmail');
您将从另一个表中获取列的值。请注意具有相同名称的列。