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 相关文章推荐
我的论坛源代码(八)
Oct 09 PHP
SSI指令
Nov 25 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
Jan 14 PHP
html静态页面调用php文件的方法
Nov 13 PHP
php使用cookie保存用户登录的用户名实例
Jan 26 PHP
PHP中余数、取余的妙用
Jun 29 PHP
php简单实现sql防注入的方法
Apr 22 PHP
php面向对象之反射功能与用法分析
Mar 29 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
php+redis实现消息队列功能示例
Sep 19 PHP
在laravel框架中使用model层的方法
Oct 08 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 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
preg_match_all使用心得分享
2014/01/31 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
第一个Vue插件从封装到发布
2017/11/22 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
Python中非常实用的一些功能和函数分享
2015/02/14 Python
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
Python三级目录展示的实现方法
2016/09/28 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
python做反被爬保护的方法
2019/07/01 Python
Python利用matplotlib绘制约数个数统计图示例
2019/11/26 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
Python3爬虫中识别图形验证码的实例讲解
2020/07/30 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
css3选择器基本介绍
2014/12/15 HTML / CSS
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
介绍一下linux文件系统分配策略
2013/02/25 面试题
家长对小学生的评语
2014/01/28 职场文书
保护环境建议书
2014/03/12 职场文书
爱心捐款倡议书
2014/04/14 职场文书
2014年计生工作总结
2014/11/21 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
2022年四月新番
2022/03/15 日漫