Yii2.0 GridView实现两表联查、搜索与分页详解
22 浏览量
更新于2024-08-31
收藏 69KB PDF 举报
"Yii2.0小部件GridView用于实现两表联查、搜索和分页功能的代码示例。在Yii2.0框架中,GridView是常用的数据展示工具,能够方便地处理复杂的数据操作,如关联查询、筛选和分页。"
在Yii2.0框架中,GridView是一个强大的小部件,常用于显示和操作数据库中的数据。当需要展示的数据涉及多张表时,例如这里提到的"两表联查",GridView可以通过关联模型(AR, Active Record)来处理这些关系。以下将详细介绍如何实现这个功能:
1. 两表联查:
- 在Yii2.0中,通过Active Record的`hasOne()`或`hasMany()`方法定义模型之间的关联。例如,如果有一个`BooksInfo`模型对应书籍信息,另一个`Authors`模型对应作者信息,可以通过在`BooksInfo`模型中定义一个`hasOne()`方法来关联作者表。
```php
public function getAuthor()
{
return $this->hasOne(Authors::className(), ['author_id' => 'author_id']);
}
```
2. 搜索功能:
- 实现搜索功能通常需要创建一个搜索模型(如`InfoSearch`),它继承自原模型,并添加用于搜索的属性和规则。在`search()`方法中,使用`yii\base\Model::load()`加载请求的参数,并根据这些参数调整查询条件。
```php
public function search($params)
{
$query = BooksInfo::find();
// 加载并验证搜索参数
$this->load($params);
// 添加关联字段到查询条件
if (!empty($this->author_name)) {
$query->joinWith('author')
->andFilterWhere(['like', 'authors.author_name', $this->author_name]);
}
// 分页和排序
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => [
'attributes' => ['title', 'author_name'], // 可排序的属性包括原模型字段和关联模型字段
],
'pagination' => [
'pageSize' => 2,
],
]);
return $dataProvider;
}
```
3. 分页:
- 分页功能由`ActiveDataProvider`自动处理。在控制器中创建数据提供者,并设置每页显示的记录数。
```php
public function actionIndex()
{
$searchModel = new InfoSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
```
4. 视图层View:
- 最后,在视图文件中使用`GridView`小部件展示数据。设置`columns`属性以指定显示的列,包括原模型的字段和关联模型的字段。例如:
```php
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'title',
['attribute' => 'author.author_name', 'label' => 'Author Name'],
// 其他列...
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
```
以上代码展示了Yii2.0小部件GridView如何处理两表联查、搜索和分页功能。在实际应用中,你可能需要根据具体需求调整搜索条件、排序规则以及展示的列。通过这种方式,开发者可以轻松地创建功能丰富的数据展示界面,同时保持代码的简洁和可维护性。
196 浏览量
2018-04-25 上传
2021-05-16 上传
2021-01-02 上传
2021-01-21 上传
2020-12-20 上传
2021-01-02 上传
2021-05-26 上传
2021-03-11 上传
weixin_38722891
- 粉丝: 6
- 资源: 884
最新资源
- StarModAPI: StarMade 模组开发的Java API工具包
- PHP疫情上报管理系统开发与数据库实现详解
- 中秋节特献:明月祝福Flash动画素材
- Java GUI界面RPi-kee_Pilot:RPi-kee专用控制工具
- 电脑端APK信息提取工具APK Messenger功能介绍
- 探索矩阵连乘算法在C++中的应用
- Airflow教程:入门到工作流程创建
- MIP在Matlab中实现黑白图像处理的开源解决方案
- 图像切割感知分组框架:Matlab中的PG-framework实现
- 计算机科学中的经典算法与应用场景解析
- MiniZinc 编译器:高效解决离散优化问题
- MATLAB工具用于测量静态接触角的开源代码解析
- Python网络服务器项目合作指南
- 使用Matlab实现基础水族馆鱼类跟踪的代码解析
- vagga:基于Rust的用户空间容器化开发工具
- PPAP: 多语言支持的PHP邮政地址解析器项目