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实现的获取URL信息的类
Jan 02 PHP
利用PHP和AJAX创建RSS聚合器的代码
Mar 13 PHP
php 获取可变函数参数的函数
Aug 26 PHP
php 分库分表hash算法
Nov 12 PHP
PHP多例模式介绍
Jun 24 PHP
php遍历文件夹和文件列表示例分享
Mar 11 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
php+xml编程之SimpleXML的应用实例
Jan 24 PHP
php文件读取方法实例分析
Jun 20 PHP
浅谈PHPANALYSIS提取关键字
Mar 08 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
Aug 30 PHP
你真的了解PHP中的引用符号(&)吗
May 12 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
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
js动态给table添加/删除tr的方法
2013/08/02 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
2014/04/03 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
Backbone.js的Hello World程序实例
2015/06/19 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
微信小程序前端源码逻辑和工作流
2016/09/25 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
jsonp实现百度下拉框功能的方法分析
2019/05/10 Javascript
简单实现python爬虫功能
2015/12/31 Python
python下载图片实现方法(超简单)
2017/07/21 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
解决使用python print打印函数返回值多一个None的问题
2020/04/09 Python
Python虚拟环境的创建和包下载过程分析
2020/06/19 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
关键字final的用法
2013/10/02 面试题
普通院校学生的自荐信
2013/11/27 职场文书
班风学风建设方案
2014/05/06 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
爱护公物主题班会
2015/08/17 职场文书
2016年七夕情人节宣传语
2015/11/25 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技