这篇文章主要给大家介绍了关于利用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' => '操作', ], ], ]); ?>
以上步骤完成结果如图:
以上是Yii 2.0分页功能实现的详细内容。更多信息请关注PHP中文网其他相关文章!

随着互联网的发展,SEO(SearchEngineOptimization,搜索引擎优化)已经成为了网站优化的重要一环。如果您想要使您的PHP网站在搜索引擎中获得更高的排名,就需要对SEO的内容有一定的了解了。本文将会介绍如何在PHP中实现SEO优化,内容包括网站结构优化、网页内容优化、外部链接优化,以及其他相关的优化技巧。一、网站结构优化网站结构对于S

随着电子商务和企业管理的发展,许多企业开始寻找更好的方法来处理其日常业务流程。ERP系统是一种能够整合企业各种业务流程的软件工具。它提供了全面的功能,包括生产、销售、采购、库存、财务等方面,帮助企业提高效率、控制成本和提高客户满意度。而在PHP编程语言中,也能够实现ERP系统,这就需要我们掌握一些基本的知识和技术。下面,我们将深入探讨如何在PHP中实现ERP

随着物联网技术的发展和普及,越来越多的应用场景需要使用PHP语言进行物联网开发。PHP作为一种广泛应用于Web开发的脚本语言,它的易学易用、开发速度快、可扩展性强等特点,使其成为开发物联网应用的一种优秀选择。本文将介绍在PHP中实现物联网开发的常用技术和方法。一、传输协议和数据格式物联网设备通常使用TCP/IP或UDP协议进行数据传输,而HTTP协议是一个优

随着企业的发展,客户管理变得越来越重要。为了提高客户满意度和忠诚度,越来越多的企业采用客户关系管理系统(CRM)来帮助其管理客户关系。而PHP是一种流行的编程语言,因其简单易学、灵活和强大而被广泛应用于Web开发。那么,如何在PHP中实现CRM系统呢?本文将为您介绍实现CRM系统的步骤和技巧。Step1:需求分析在开始开发CRM系统之前,您需要进行需求分析

随着互联网的发展,轮播图已经成为了网页设计中必不可少的一部分。在很多网页中,轮播图经常被用作展示企业文化、最新产品或是推广活动等场景。本篇文章将会分享如何使用PHP来实现轮播图的功能。一、轮播图的概念轮播图是网页中一种常见的视觉效果,一般由多个图片组成,在页面中自动或手动进行切换,展示多个内容。可以添加符合业务要求的动画效果,有助于引起用户的关注和提高网站的

智能合约(SmartContract)是一种基于区块链的自动化交易程序,可以实现自动化执行、验证和执行交易。智能合约可以减少交易中的人为干扰,提高交易的安全性和效率。在不同的区块链中,智能合约的实现方式略有不同。本文将介绍在PHP中如何实现智能合约。PHP是一种广泛使用的编程语言,特别适合Web开发。PHP有着成熟的开源生态系统,以及许多可靠的框架和库。在

随着互联网的不断发展,越来越多的网站需要使用验证码来保证安全性。验证码是一种借助人类能力而无法被计算机破解的认证技术,广泛应用于网站注册、登录、找回密码等功能中。下面将介绍如何使用PHP实现验证码功能。一、生成验证码图片验证码图片的生成是验证码功能的核心,需要生成一个随机字符,并将其渲染为图像展示给用户。在PHP中,可以使用GD库来生成图片。GD库是一种用于

随着移动互联网的发展,微信已经成为了人们生活中不可或缺的一部分,越来越多的商家选择在微信平台上开展业务。实现微信支付功能对于商家来说是非常必要的。本文将介绍如何使用PHP实现JSAPI支付。首先,我们需要了解什么是JSAPI支付。JSAPI是微信公众号支付功能的一种,通过JS调用微信支付接口实现支付。JSAPI支付的优点在于用户只需要在微信中进行支付,不需要


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver Mac版
视觉化网页开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),