Yii 2.0实现联表查询加搜索分页的方法示例


Posted in PHP onAugust 02, 2017

前言

最近在学习yii2.0,在使用yii2.0过程中遇到一些问题,现将查询搜索分页的方法整理如下,分享出来供大家参考学习,话不多说,来一起看看详细的介绍:

主表:{{%article}}

关联表:{{%article_class}}

方法如下

1、使用gii创建CRUD和search不详述

2、在Article中添加的关联内容,代码#注释部分

class Article extends \yii\db\ActiveRecord 
{ 
 #关联查询1:这里加上被关联字段 
 public $class_name; 
... 
 public function rules() 
 { 
  return [ 
   [['article_title','article_content'], 'required'], 
   [['article_content','article_title','article_class'], 'string'], 
   [['article_addtime', 'article_updatetime'], 'integer'], 
   [['article_title', 'article_author'], 'string', 'max' => 50], 
   #关联查询2:这里加上safe验证,表示该表单字段无验证规则 
   ['class_name','safe'], 
  ]; 
 } 
... 
 #关联查询3:获取被关联表 mysite_article_class 
 public function getArticleClass(){ 
  /** 
  * 第一个参数为要关联的子表模型类名称, 
  * 第二个参数指定通过子表的 id 去关联主表的 article_class 字段 
  */ 
  return $this->hasMany(ArticleClass::className(), ['id' => 'article_class']); 
 } 
... 
}

3、在ArticleSearch中添加的查询和关联内容,代码#注释部分

class ArticleSearch extends Article 
{ 
 #关联查询1:这里加上被关联字段 
 public $class_name; 
... 
 public function rules() 
 { 
  return [ 
   [['id', 'article_addtime', 'article_updatetime'], 'integer'], 
   [['article_title', 'article_content', 'article_class', 'article_author'], 'safe'], 
   #关联查询2:这里加上safe验证,表示该表单字段无验证规则 
   ['class_name','safe'], 
  ]; 
 } 
... 
 public function search($params) 
 { 
  $query = Article::find(); 
 
  // add conditions that should always apply here 
  #关联查询4:使用jionWith和select做关联查询 
  $query = Article::find(); 
  $query->joinWith(['articleClass']); 
  $query->select("{{%article}}.*,{{%article_class}}.class_name"); 
   
  $dataProvider = new ActiveDataProvider([ 
   'query' => $query, 
  ]); 
   
  $this->load($params); 
  if (!$this->validate()) { 
   return $dataProvider; 
  } 
   
  // grid filtering conditions 
  #精确查询 
  $query->andFilterWhere([ 
   'id' => $this->id, 
   'article_addtime' => $this->article_addtime, 
   'article_updatetime' => $this->article_updatetime, 
   #关联查询5:添加被关联字段的精确查询,这里要跟view表单被查询属性一致, 
//   '{{%article_class}}.class_name' => $this->class_name, 
  ]); 
   
  #模糊查询 
  $query->andFilterWhere(['like', 'article_title', $this->article_title]) 
   ->andFilterWhere(['like', 'article_content', $this->article_content]) 
   ->andFilterWhere(['like', 'article_class', $this->article_class]) 
   ->andFilterWhere(['like', 'article_author', $this->article_author]) 
   #关联查询5:添加被关联字段的精确查询,这里要跟view表单被查询属性一致, 
   ->andFilterWhere(['like', '{{%article_class}}.class_name', $this->class_name]); 
  return $dataProvider; 
 } 
... 
}

4、在ArticleController中添加的分页内容,代码#注释部分

public function actionIndex() 
 {  
  $article = new Article(); 
  #查询 
  $searchModel = new ArticleSearch(); 
  $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 
  #分页 
  $dataProvider->pagination = ['pagesize' => '3']; 
  return $this->render('index', [ 
   'dataProvider' => $dataProvider, 
   'model' => $article, 
   'searchModel' => $searchModel, 
  ]); 
 }

5、在index view中添加的表单内容,代码#注释部分

<?= GridView::widget([ 
 'dataProvider' => $dataProvider, 
 #查询表单 
 'filterModel' => $searchModel, 
 'columns' => [ 
  [ 
   'class' => 'yii\grid\SerialColumn', 
   'header' => '编号', 
  ], 
//  'article_class', 
  #注意这里被关联表字段是{{%article_class}}.class_name,表单属性这么写'attribute' => 'class_name', 
  #查询结果就是被关联表字段值'value' => 'class_name', 
  [ 
   'label'=>'文章分类', 
   'attribute' => 'class_name', 
   'value' => 'class_name', 
 
  ], 
  'article_title', 
  'article_addtime:datetime', 
  // 'article_updatetime:datetime', 
  // 'article_author', 
  [ 
   'class' => 'yii\grid\ActionColumn', 
   'header' => '操作', 
  ], 
 ], 
]); ?>

以上步骤完成结果如图:

Yii 2.0实现联表查询加搜索分页的方法示例

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
简单的用PHP编写的导航条程序
Oct 09 PHP
PHP图片上传类带图片显示
Nov 25 PHP
PHP操作数组的一些函数整理介绍
Jul 17 PHP
基于PHP常用字符串的总结(待续)
Jun 07 PHP
php生成txt文件标题及内容的方法
Jan 16 PHP
php计算程序运行时间的简单例子分享
May 10 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
PHP实现数据分页显示的简单实例
May 26 PHP
PHP文件与目录操作示例
Dec 24 PHP
利用php-cli和任务计划实现订单同步功能的方法
May 03 PHP
PHP常见过waf webshell以及最简单的检测方法
May 21 PHP
PHP解决高并发的优化方案实例
Dec 10 PHP
YII框架中使用memcache的方法详解
Aug 02 #PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 #PHP
php7安装mongoDB扩展的方法分析
Aug 02 #PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
Aug 02 #PHP
基于win2003虚拟机中apache服务器的访问
Aug 01 #PHP
完美解决Thinkphp3.2中插入相同数据的问题
Aug 01 #PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
Aug 01 #PHP
You might like
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
2016/01/28 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
微信小程序云开发之使用云函数
2019/05/17 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
[01:01:01]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第一场 10.29
2020/10/29 DOTA
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
单利模式及python实现方式详解
2018/03/20 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
Python定时任务sched模块用法示例
2018/07/16 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
高三地理教学反思
2014/01/11 职场文书
西式婚礼主持词
2014/03/13 职场文书
四风查摆剖析材料
2014/10/10 职场文书
教学督导岗位职责
2015/04/10 职场文书
2015年行政人事部工作总结
2015/05/13 职场文书
教你怎么用Python生成九宫格照片
2021/05/20 Python