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执行速率优化技巧小结
Mar 15 PHP
PHP防注入安全代码
Apr 09 PHP
火车采集器 免费版使出收费版本功能实现原理
Sep 17 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
May 02 PHP
PHP动态输出JavaScript代码实例
Feb 12 PHP
什么是OneThink oneThink后台添加插件步骤
Apr 13 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
Aug 17 PHP
PHP基于单例模式编写PDO类的方法
Sep 13 PHP
Zend Framework入门教程之Zend_View组件用法示例
Dec 09 PHP
php+ajax+json 详解及实例代码
Dec 12 PHP
Bootstrap+PHP实现多图上传功能实例详解
Apr 08 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 26 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中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
PHP导入导出Excel代码
2015/07/07 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
php实现的二分查找算法示例
2017/06/20 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
用 javascript 实现的点击复制代码
2007/03/24 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
2016/08/21 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
实现一个 Vue 吸顶锚点组件方法
2019/07/10 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
[01:15:29]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第三局
2016/03/04 DOTA
python读写文件操作示例程序
2013/12/02 Python
Python实现的质因式分解算法示例
2018/05/03 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
2014迎新年晚会策划方案
2014/02/23 职场文书
我的梦中国梦演讲稿
2014/04/23 职场文书
服务承诺书格式
2014/05/21 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
单位工资证明范本
2015/06/12 职场文书
三好学生主要事迹怎么写
2015/11/03 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书
家长必看:义务教育,不得以面试 评测等名义选拔学生
2019/07/09 职场文书