Yii 2.0实现联表查询加搜索分页的方法示例
2017-10-11 19:24
816 查看
前言 最近在学习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; } ... } |
相关文章推荐
- Yii 2.0实现联表查询加搜索分页的方法示例
- Yii2.0-advanced-6—联表查询加搜索分页
- thinkPHP5框架实现分页查询功能的方法示例
- mongodb实现同库联表查询方法示例
- Yii框架结合sphinx,Ajax实现搜索分页功能示例
- thinkPHP多表查询及分页功能实现方法示例
- Yii框架结合sphinx,Ajax实现搜索分页功能示例
- yii框架搜索后分页查询方法
- .net搜索查询并实现分页实例
- yii2.0给表单添加验证码的实现方法
- Yii实现分页的两种方法
- MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法
- Yii2.0框架基础--数据查询之AR类方法一
- 搜索查询并实现分页
- Oracle数据库分页查询的几种实现方法
- yii2.0给表单添加验证码的实现方法
- cassandra2.0 如何实现分页查询
- lucene再查询分页搜索和lucene的搜索_基于searchAfter的实现
- MySQL、SqlServer、Oracle三大主流数据库实现分页查询的方法
- YII实现分页的方法