Yii2-GridView给关联字段添加搜索和排序功能

本文同时收录于 超能小紫的Yii2学习笔记

需求

一个试用申请平台,需要在试用申请列表(Application)内展示申请人(User)姓名

准备工作

用gii生成Model、CRUD
如果你不知道什么是gii,请不要跟别人说你会用yii

数据库结构

申请表application 含有字段 user_id 与 用户表user 的 id 字段一对一关联

第一步

给Application模型添加如下方法

如果你不知道这有什么用,请阅读 Yii2手册 内的 查询关联的数据 一节

第二步

给ApplicationSearch模型添加一个属性

这个属性用于存放申请人姓名,在后续操作中yii会自动调用它;

rules() 方法中将 user_name 设为 safe。例如这样

否则的话,在后续的搜索时会被yii认为是不安全的字段而丢弃

第三步

修改ApplicationSearch模型的search方法

然后添加排序,在

后面添加如下代码

这样就可以正常排序了。然后再添加搜索功能

第四步

修改视图层 application/index 内的 GridView::widget()参数,给 columns 数组添加以下成员:

至此,刷新浏览器,应该就可以看到关联字段被正常显示并支持搜索、排序了