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脚本的10个技巧(2)
Oct 09 PHP
php上传文件的增强函数
Jul 21 PHP
mysql_num_rows VS COUNT 效率问题分析
Apr 23 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
Apr 23 PHP
PHP读取汉字的点阵数据
Jun 22 PHP
PHP正则表达式之捕获组与非捕获组
Nov 06 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
Nov 30 PHP
php的api数据接口书写实例(推荐)
Sep 22 PHP
php微信开发之图片回复功能
Jun 14 PHP
PHP实现PDO操作mysql存储过程示例
Feb 13 PHP
浅析PHP中json_encode与json_decode的区别
Jul 15 PHP
基于PHP实现用户在线状态检测
Nov 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
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
PHP常用的小程序代码段
2015/11/14 PHP
php实现微信发红包
2015/12/05 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
javascript高级编程之函数表达式 递归和闭包函数
2015/11/29 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
使用百度地图实现地图网格的示例
2018/02/06 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
Python help()函数用法详解
2014/03/11 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
使用python绘制二维图形示例
2019/11/22 Python
flask框架蓝图和子域名配置详解
2020/01/25 Python
python实现简单飞行棋
2020/02/06 Python
Python自动发送和收取邮件的方法
2020/08/12 Python
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
高中毕业自我鉴定
2013/12/19 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
小学教师读书笔记
2015/07/01 职场文书
2015年大学生暑期实习报告
2015/07/13 职场文书
2016年教代会开幕词
2016/03/04 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript
Python何绘制带有背景色块的折线图
2022/04/23 Python