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 相关文章推荐
NOT NULL 和NULL
Jan 15 PHP
php生成静态文件的多种方法分享
Jul 17 PHP
PHP Directory 函数的详解
Mar 07 PHP
PHP APC的安装与使用详解
Jun 13 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
Aug 25 PHP
浅析THINKPHP的addAll支持的最大数据量
Feb 03 PHP
php简单实现屏蔽指定ip段用户的访问
Apr 29 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
php实现在线考试系统【附源码】
Sep 18 PHP
PHP的mysqli_stat()函数讲解
Jan 23 PHP
PHP析构函数destruct与垃圾回收机制的讲解
Mar 22 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 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检测用户是否关闭浏览器的方法
2016/02/14 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
基于Vuejs和Element的注册插件的编写方法
2017/07/03 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
python引用DLL文件的方法
2015/05/11 Python
python实现12306火车票查询器
2017/04/20 Python
Python模拟用户登录验证
2017/09/11 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
python sorted函数的小练习及解答
2019/09/18 Python
自学python用什么系统好
2020/06/23 Python
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
董事长职责范文
2013/11/08 职场文书
初中生个人学习的自我评价
2013/12/04 职场文书
保险内勤岗位职责
2014/04/05 职场文书
清明节网上祭英烈活动总结
2014/04/30 职场文书
任命书格式
2014/06/05 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
2015年电工工作总结
2015/04/10 职场文书
于丹论语心得观后感
2015/06/15 职场文书
Go标准容器之Ring的使用说明
2021/05/05 Golang