Yii 2.0实现联表查询加搜索分页的方法示例

前言

最近在学习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' => '操作',
  ],
 ],
]); ?> 

以上步骤完成结果如图:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • yii2实现分页,带搜索的分页功能示例

    一.模型配置 事例会用到三个models.文章类别表和文章表用gii生成下即可,最后一个是搜索验证模型.其中,只讲下一个联表和搜索验证.其他不用操作. 1.文章表关联 <?php //...other code //关联 public function getCate(){ return $this->hasOne(ArticleCate::className(),['id' => 'cid']); } ?> 2.搜索模型 common/models/search/创建Articl

  • YII框架中搜索分页jQuery写法详解

    控制层 use frontend\models\StudUser; use yii\data\Pagination; use yii\db\Query; /** * 查询 * */ public function actionSearch() { //接值 $where=Yii::$app->request->get(); //实例化query $query=new Query(); $query->from('stud_user'); //判断 if(isset($where['sex

  • yii框架搜索分页modle写法

    控制器层 <?PHP namespace frontend\controllers; header('content-type:text/html;charset=utf-8'); use Yii; use yii\base\InvalidParamException; use yii\web\BadRequestHttpException; use yii\web\Controller; use yii\filters\VerbFilter; use yii\filters\AccessCon

  • Yii框架结合sphinx,Ajax实现搜索分页功能示例

    本文实例讲述了Yii框架结合sphinx,Ajax实现搜索分页功能的方法.分享给大家供大家参考,具体如下: 效果图: 控制器: <?php namespace backend\controllers; use Yii; use yii\web\Controller; use yii\data\Pagination; use SphinxClient; use yii\db\Query; use yii\widgets\LinkPager; use backend\models\Goods; cl

  • 详解Yii2.0使用AR联表查询实例

    Yii2.0中使用联表查询有两种办法,第一种是查询构建器(Query Builder),第二种使用活动记录(Active Record),中文网对查询构建器讲的很详细,AR则说的很坑爹,下面贴出自己实践的方法,以供参考. 两个表 {{%article}} 和 {{%article_class}} {{%article}} .article_class关联{{%article_class}}.id 1.要使用AR做关联查询,首先在models {Article} 中创建关联: class Arti

  • Yii 2.0实现联表查询加搜索分页的方法示例

    前言 最近在学习yii2.0,在使用yii2.0过程中遇到一些问题,现将查询搜索分页的方法整理如下,分享出来供大家参考学习,话不多说,来一起看看详细的介绍: 主表:{{%article}} 关联表:{{%article_class}} 方法如下 1.使用gii创建CRUD和search不详述 2.在Article中添加的关联内容,代码#注释部分 class Article extends \yii\db\ActiveRecord { #关联查询1:这里加上被关联字段 public $class_

  • Mybatis实现联表查询并且分页功能

    今天同学突然问我这个怎么搞. 然后自己搞了一下发现这个玩意有坑..就记录一下 0. 表结构 person表 cat表 一个person有多个cat 实体类就这么写 1. 实体类 Person实体类 @Data public class Person implements Serializable { private static final long serialVersionUID = -70682701290685641L; private Integer personid; private

  • MySQL联表查询的简单示例

    MySql会用到联表查询,对于刚学习的新手来说,可能会理解起来有难度.下面这篇文章就来给大家详细介绍MySQL联表查询的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 关系型数据库,免不了表之间存在各种引用与关联.这些关联是通过主键与外键搭配来形成的.所以,取数据时,很大情况下单张表无法满足需求,额外的数据则需要将其他表加入到查询中来,这便是 JOIN 关键字完成的操作. MySQL 中 JOIN, CROSS JOIN 和 INNER JOIN 三者语法功能上相同,可

  • MySQL联表查询基本操作之left-join常见的坑

    概述 对于中小体量的项目而言,联表查询是再常见不过的操作了,尤其是在做报表的时候.然而校对数据的时候,您发现坑了吗?本篇文章就 mysql 常用联表查询复现常见的坑. 基础环境 建表语句 DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `role_name` VARCHAR(50) DEFAULT NULL COMMENT '角色名', PRIMARY KEY (`i

  • MySQL派生表联表查询实战过程

    目录 前情提要: 查询过程: 总结: 前情提要: 公司运营的一个商城系统,忽然发现订单提现功能有问题,有大量的商户体现金额和订单金额不一致.于是产生了需求,需要把提现表和供应商表作为一个结果集,连接上订单表中的订单金额,通过计算订单表的金额和体现表商户提现的金额进行比对,查看商户是多提现了还是少提现了. 下面记录我的查询过程. 查询过程: 刚开始,第一步我以提现表为主表,查询出来相关结果.MySQL语句如下 SELECT count(ysw.supply_id) AS '提现次数',ysw.us

  • Spring JPA联表查询之OneToOne源码详解

    目录 前言 源码 注解属性 单向联表 user 实体类 car 实体类 查询结果 双向联表 user 实体 car 实体 查询结果 延迟加载(懒加载) user 实体 查询结果: 查询完会发现,控制台又打印了一个 JPQL: 最后结论 前言 前面几篇我们学习的都是单表查询,就是对一张表中的数据进行查询.而实际项目中,基本都会有多张表联合查询的情况,今天我们就来了解下JPA的联表查询是如做的. 源码 @OneToOne 注解实现一对一关系映射.比如用户跟车辆的关系(这里假设一个人只能有一辆车),一

  • mongodb实现同库联表查询方法示例

    前言 最近在工作中遇到一个问题,需要对mongodb数据库进行联表查询操作,发现网上这方面的资料较少,无奈只能自己来实现了,下面话不多说了,来一起看看详细的介绍: 注意:这里只对同库联表查询做介绍,跨库联表查询可能在之后也会介绍(因为公司架构变动,之后可能会联表查询) 我用到的联表查询有两种,一种是mongoose的populate,一种是$lookup 一.populate populate是使用外键关联子表 例如现在有一张订单表结构(动态外键): var orderSchema = new

  • MyBatis-Plus联表查询(Mybatis-Plus-Join)的功能实现

    目录 引入依赖 数据准备 修改Mapper 查询 分页查询 最后 mybatis-plus作为mybatis的增强工具,简化了开发中的数据库操作.一旦遇到left join或right join的左右连接,还是得老老实实的打开xml文件,手写上一大段的sql语句.今天总结一下一款叫做mybatis-plus-join的工具(后面就简称mpj了),可以用类似mybatis-plus中QueryWrapper的方式来进行联表查询. 引入依赖 首先在项目中引入引入依赖坐标,因为mpj中依赖较高版本my

  • Mysql 如何实现多张无关联表查询数据并分页

    Mysql 多张无关联表查询数据并分页 功能需求 在三张没有主外键关联的表中取出自己想要的数据,并且分页. 数据库表结构 水果表: 坚果表: 饮料表: 数据库随便建的,重在方法. 主要使用UNION ALL 操作符 UNION ALL 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION ALL内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列的顺序必须相同 ; 另外,UNION ALL结果集中的列名总是等于 U

随机推荐