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 相关文章推荐
PHPLog php 程序调试追踪工具
Sep 09 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
Nov 01 PHP
使用JSON实现数据的跨域传输的php代码
Dec 20 PHP
PHP cdata 处理(详细介绍)
Jul 05 PHP
php的慢速日志引起的Mysql错误问题分析
May 13 PHP
ThinkPHP之foreach标签使用概述
Jun 30 PHP
php使用MySQL保存session会话的方法
Jun 26 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
PHP控制前台弹出对话框的实现方法
Aug 21 PHP
Yii2创建多界面主题(Theme)的方法
Oct 08 PHP
php二维数组按某个键值排序的实例讲解
Feb 15 PHP
PHP基本语法
Mar 31 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
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
php简单的上传类分享
2016/05/15 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
js资料toString 方法
2007/03/13 Javascript
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
jQuery实现的form转json经典示例
2017/10/10 jQuery
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
在小程序中使用canvas的方法示例
2018/09/17 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
python算法学习之基数排序实例
2013/12/18 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
PyQt5每天必学之布局管理
2018/04/19 Python
python如何读取bin文件并下发串口
2019/07/05 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
canvas与html5实现视频截图功能示例
2016/12/15 HTML / CSS
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
副总经理任命书
2014/06/05 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
酒店开业主持词
2015/07/02 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang