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连mysql和oracle数据库性能比较
Oct 09 PHP
AJAX for PHP简单表数据查询实例
Jan 02 PHP
Discuz Uchome ajaxpost小技巧
Jan 04 PHP
php设计模式 Adapter(适配器模式)
Jun 26 PHP
PHP禁止页面缓存的代码
Oct 23 PHP
$_GET['goods_id']+0 的使用详解
Jun 06 PHP
PHP四大安全策略
Mar 12 PHP
PHP延迟静态绑定示例分享
Jun 22 PHP
一个完整的php文件上传类实例讲解
Oct 27 PHP
微信小程序 消息推送php服务器验证实例详解
Mar 30 PHP
php5.6.x到php7.0.x特性小结
Aug 17 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 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中目录,文件操作详谈
2007/03/19 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
2015/04/21 PHP
php中的异常和错误浅析
2017/05/03 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
JavaScript实现删除,移动和复制文件的方法
2015/08/05 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
webpack入门必知必会
2017/01/16 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
vue+axios全局添加请求头和参数操作
2020/07/24 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
Python中暂存上传图片的方法
2015/02/18 Python
python如何让类支持比较运算
2018/03/20 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
党员组织关系介绍信
2014/02/13 职场文书
导航工程专业自荐信
2014/09/02 职场文书
2015年员工工作总结范文
2015/04/08 职场文书