[英]Is there some option to create Yii2 ActiveDataProvider from query and static data?
我使用ActiveDataProvider通过GridView显示一些数据。 另外我有一些从API检索的数据,这是一个数组。 例如:
$emails = [
'123' => 'john@test.io',
'234' => 'jane@test.io',
'345' => 'jake@test.io'
];
$query = new Query();
$query->select(['id', 'username'])->from('user');
$provider = new \yii\data\ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 100,
],
]);
显示此ActiveDataProvider的结果将是这样的:
+------+--------------+
| id | username |
+------+--------------+
| 123 | John |
| 234 | Jane |
| 345 | Jake |
+------+--------------+
如何将查询和数组中的数据连接起来,得到这样的结果:
+------+--------------+-------------------+
| id | username | email |
+------+--------------+-------------------+
| 123 | John | john@test.io |
| 234 | Jane | jane@test.io |
| 345 | Jake | jake@test.io |
+------+--------------+-------------------+
我找到了唯一的选择-从查询创建一个数组并将其与现有数组合并,但这对我来说似乎很糟糕。 还有其他解决方案吗?
您可能正在寻找这个https://www.yiiframework.com/doc/api/2.0/yii-data-arraydataprovider
ArrayDataProvider在许多方面与ActiveDataProvider相同,并且可以将其用作大多数Yii2控件的基础数据。 我将获取ActiveDataProvider数据,进行解析,将其与默认情况下已经拥有的数据进行匹配,并创建一个可用作ArrayDataProvider基础的数组。
如果将其放入DataGrid中,则始终可以对email列执行类似的操作
[
'class' => 'yii\grid\DataColumn',
'attribute' => 'email',
'format'=>'raw',
'value'=>function ($model) use ($emails) {
return $emails[$model->id];
},
],
对于复杂或聚合模型,一种方法可以基于模型中的add和afterFind方法
添加所需的属性并使用适当的函数填充值,例如:named getYourRelatedEmail()
或者您可以根据您对电子邮件数组或相关值的使用方式进行分配)
在您的模型中
public $userEmail;
public function afterFind()
{
$this->userEmail = getYourRelatedEmail();
}
通过这种方式,您可以在gridview中访问模型数据字段作为通用模型字段
这样,您可以从不同的源检索所需的所有数据,并根据需要构建综合模型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.