yii2 - 如何在视图中显示多个 GridView,其中一个 DataProvider 按某个字段对其进行分组?
问题描述
A 有一个表“操作”,其中包含所有用户的财务操作,包括“id”、“user_id”、“sum”、“name”、“date_picked”等。
我创建了一个 ActiveDataProvider 来获取具体用户的所有操作。现在我想在视图中显示来自这个数据提供者的数据——不是在一个 GridView 中,而是在几个 GridViews 中,这些数据按“date_picked”值分组。
我知道我可以为每个“date_picked”创建一个新的数据提供者,但是会有大量的数据库请求。
有没有办法根据一个数据提供者的数据在多个 GridView 中显示分组数据?
Controller:
/** @var OperationComponent $comp */
$comp = Yii::$app->operation;
$userId = Yii::$app->user->id;
$filterModel = $comp->getOperationSearch();
$operations = $comp->getSearchProvider($userId, Yii::$app->request->get());
OperationComponent:
public function getOperationSearch()
{
return new OperationSearch();
}
public function getSearchProvider($user_id, $params)
{
$model = new OperationSearch();
return $model->search($user_id, $params);
}
OperationSearch:
public function search($user_id, $params)
{
$query = Operation::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 10,
],
// сортировка по умолчанию
'sort' => [
'defaultOrder' => [
'date_picked' => SORT_DESC
]
]
]);
return $dataProvider;
View:
....
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $filterModel,
.....
]); ?>
....
解决方案
复杂的 GridView 有一个 Yii2 扩展:kartik-v/yii2-grid
它包含用于显示行详细信息的可折叠行。
您可以在此处查看演示。
您正在寻找的是Expand Row Column Widget。它允许通过仅加载此行详细信息所需的数据来扩展行。
这个扩展有一个很好的文档,非常稳定并且经过测试,可以直接使用。
推荐阅读
- python - 如何在 Django 视图中链接查询
- python - QtWebEngine 在使用 PyQT 的 MacOS 上导致分段错误。出了什么问题?
- python - Python中的列表指针
- java - C 和 Java 中 `glVertexAttribPointer` 函数的区别
- autohotkey - AHK 等待更多热键按下以循环选择选项
- javascript - 如何链接 d3 转换?
- java - 如何使用房间数据库使进度条影响 UI 上的数据?
- c++ - 如何使用可变参数函数在包装器中传递参数?
- pentaho - 使用 Pentaho BI server 7 和用于 Sampledata 数据库的模式工作台创建多维数据集
- javascript - 当 ID 在对象外部时,如何将 ID 移动到对象内部?