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 相关文章推荐
实例(Smarty+FCKeditor新闻系统)
Jan 02 PHP
PHP获取当前文件所在目录 getcwd()函数
May 13 PHP
第七章 php自定义函数实现代码
Dec 30 PHP
逆序二维数组插入一元素的php代码
Jun 08 PHP
PHP设计模式之调解者模式的深入解析
Jun 13 PHP
php实现分页工具类分享
Jan 09 PHP
php文档工具PHP Documentor安装与使用方法
Jan 25 PHP
PHP魔术方法使用方法汇总
Feb 14 PHP
Symfony2函数用法实例分析
Mar 18 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
Sep 22 PHP
Zend Framework实现自定义过滤器的方法
Dec 09 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 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
php 信息采集程序代码
2009/03/17 PHP
php SQL之where语句生成器
2009/03/24 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
理解Javascript_13_执行模型详解
2010/10/20 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
js事件冒泡实例分享(已测试)
2013/04/23 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
element-ui中Table表格省市区合并单元格的方法实现
2019/08/07 Javascript
Javascript原生ajax请求代码实例
2020/02/20 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
python应用程序在windows下不出现cmd窗口的办法
2014/05/29 Python
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
linux 下实现python多版本安装实践
2014/11/18 Python
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
在Python中调用ggplot的三种方法
2015/04/08 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
2016/06/14 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
python使用插值法画出平滑曲线
2018/12/15 Python
python json.loads兼容单引号数据的方法
2018/12/19 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
借条如何写
2015/05/26 职场文书
毕业酒会致辞
2015/07/29 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
用CSS3画一个爱心
2021/04/27 HTML / CSS