显示数据表格(一种控件)两表联查/搜索/分页
当我们在一个网格视图中显示活动数据的时候,你可能会遇到这种情况,就是显示关联表的列的值,为了使关联列能够排序,你需要连接关系表,以及添加排序规则到数据提供者的排序组件中,对数据进行搜索,排序。
.控制器层控制器
?服务器端编程语言(Professional Hypertext Preprocessor的缩写)命名空间后端控制器;标题('内容类型:文本/html;charset=utf-8 ');使用Yii使用yii web 控制器;//超级控制器类使用后端模型 bookinfo//表模型类使用后端模型信息搜索;//引入搜索模型类使用yii data ActiveDataProvider//小部件数据源类使用yii grid GridView//查询小部件/* * * @抽象BooksController * @作者NING[电子邮件[电子邮件受保护]]* @版本[1.0版][书籍管理]*/class bookinfocontroller扩展了控制器{ //书籍列表公共函数actionIndex(){ $ search model=new InfoSearch();//实例化searchModel[搜索Model] if(!空($ _ GET[' InfoSearch ']){ $ getSearch=yii : $ app-request-GET();//接收搜索字段$ data=$ search model-search($ getSearch);}else{ //小部件查询数据$ data=新的活动数据提供程序([' query '=bookinfo : find(),//查询数据分页=[ 'pageSize'=2,//每页显示条数],' SORT '=['默认顺序'=[//' created _ at '=SORT _ desc,' id'=SORT_ASC,//[字段]设置排序] ], ]);} //传送查询数据、搜素模型返回$this-render('index ',['data'=$data,' search model '=$ search model]);}?.查询模型层模型
?服务器端编程语言(Professional Hypertext Preprocessor的缩写)命名空间后端模型;使用Yii使用yii db ActiveRecord/* * * @摘要[BookForm]* @作者NING[电子邮件[电子邮件受保护]]* @版本[向量1.0] [书籍详情模型]*/class bookinfo扩展了ActiveRecord{ /** * @设置表名*/public static function tableName(){ return“{ books _ info } }”;} //关联表公共函数getbooktype(){//hasOne要求返回两个参数第一个参数是关联表的类名第二个参数是两张表的关联关系//这里编号是书籍类型表的id,关联图书信息表的type_id返回$ this-hasOne(booktype :3360类名(),[' id '=' type _ id ']);}公共函数attributeLabels(){ return[' ID '=' ID ',' book_name'='书籍名称,' book_face'='书籍封面,' type_id'='书籍分类ID ',' type_name'='书籍分类', ];}}?.搜索模型层搜索
?phpnamespace后端模型;//命名空间使用Yii使用yii base Model//引入基类模型使用yii data active数据提供程序;//引入数据源类/* * * @摘要[搜索model]* @ return[type]* @ author NING[电子邮件受保护]]*///注意:此处继承的是查询模型-bookinfoloclass信息搜索扩展了bookinfo { public $ type _ name//定义属性变量//只有在规则()函数中声明的字段才可以搜索public function rules(){ return[//[' book _ name ',' type_name'],' safe'],['type_name'],' safe '];}公共功能场景(){ //旁路在父类中实现的场景()函数返回模型: senarios();}公共函数search($ params){ $ query=bookinfo : find();$dataProvider=新的活动数据提供程序([' query '=$ query,' pagination'=[ 'pageSize'=1,],]);/*这里的文章类别是文章模型里面关联的方法名,除了首字母,其他都要完全一样,否则会报错*/$ query-使用([' BookType '])连接;//从参数的数据中加载过滤条件,并验证if(!($ this-load($ params)$ this-validate()){ return $ data provider;} //增加过滤条件来调整查询对象$query-andFilterWhere(['like ',' book_name ',$ this-book _ name]);//添加关联字段过滤条件[注意:此处books_type.type_name中书籍类型为分类表名] $query-andFilterWhere(['like ',' books_type.type_name ',$ this-type _ name]);返回$ dataProvider}}?.视图层视角
?服务器端编程语言(Professional Hypertext Preprocessor的缩写)使用yii 网格 GridView使用yii 数据活动数据提供程序使用yii 网格操作列使用yii helpers Html$this-title='图书列表;-面包屑-ol class='面包屑' lia href=' # ' rel='外部nofollow ' rel='外部nofollow ' Home/a/Li lia href=' # ' rel='外部nofollow ' rel='外部nofollow '图书信息/a/li li class='active '图书列表/li/ol?phpecho GridView : Widget(['数据提供程序'=$ data,//数据源filterModel'=$searchModel,//搜索列列=[//['筛选模型'=$搜索模型],[' class '=' yii grid checkbox column '],//复选框列['属性'='id'],['属性'='book_name ',],['属性'='book_face ',' content '=函数($model){ //图片显示返回html : img($ model-book _ face,[' width '=' 50 ']);}],[ 'attribute'='type_name ',' value '=' booksType.type _ name ',//两表联查[书籍类型] ],[' class '=' yii grid action列',' header'='操作'], //动作列],'寻呼机'=[//自定义分页样式以及显示内容prevPageLabel '='上一页,' nextPageLabel'='下一页,' firstPageLabel'='第一页,' lastPageLabel'='最后一页,' options '=[' style '='左边距:200 px',' class'='pagination'],],]);.效果展示
总结
以上所述是小编给大家介绍的Yii2.0小部件GridView(两表联查/搜索/分页)功能的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!