Yii 2.0实现联表查询加搜索分页的方法示例
发布时间 - 2026-01-11 02:36:39 点击率:次前言

最近在学习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' => '操作',
],
],
]); ?>
以上步骤完成结果如图:
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# yii2.0分页
# yii2.0联表查询
# yii中的搜索与分页
# Yii2中使用join、joinwith多表关联查询
# Yii多表联合查询操作详解
# Yii2中多表关联查询hasOne hasMany的方法
# Yii2.0表关联查询实例分析
# 详解Yii2.0使用AR联表查询实例
# Yii2.0框架模型多表关联查询示例
# Yii框架关联查询with用法分析
# Yii2实现跨mysql数据库关联查询排序功能代码
# Yii中的relations数据关联查询及统计功能用法详解
# Yii框架连表查询操作示例
# 表单
# 分页
# 要跟
# 第一个
# 第二个
# 如图
# 这篇文章
# 谢谢大家
# 多说
# 现将
# 查询结果
# 文章分类
# 过程中
# 方法如下
# 有疑问
# required
# article_updatetime
# article_addtime
# string
# article_content
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Android okhttputils现在进度显示实例代码
历史网站制作软件,华为如何找回被删除的网站?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
Laravel如何记录自定义日志?(Log频道配置)
微信推文制作网站有哪些,怎么做微信推文,急?
Laravel安装步骤详细教程_Laravel环境搭建指南
长沙企业网站制作哪家好,长沙水业集团官方网站?
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
Python数据仓库与ETL构建实战_Airflow调度流程详解
打造顶配客厅影院,这份100寸电视推荐名单请查收
如何用花生壳三步快速搭建专属网站?
MySQL查询结果复制到新表的方法(更新、插入)
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
零基础网站服务器架设实战:轻量应用与域名解析配置指南
JavaScript实现Fly Bird小游戏
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
如何生成腾讯云建站专用兑换码?
php 三元运算符实例详细介绍
详解jQuery中的事件
Python文件异常处理策略_健壮性说明【指导】
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
Laravel Docker环境搭建教程_Laravel Sail使用指南
JS实现鼠标移上去显示图片或微信二维码
如何在阿里云通过域名搭建网站?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
如何在云主机快速搭建网站站点?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何在万网开始建站?分步指南解析
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
Linux系统运维自动化项目教程_Ansible批量管理实战
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
如何快速重置建站主机并恢复默认配置?
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
C语言设计一个闪闪的圣诞树
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
如何快速建站并高效导出源代码?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
javascript如何操作浏览器历史记录_怎样实现无刷新导航
简单实现jsp分页
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
上一篇:怀化网站建设需注意哪些关键流程?
下一篇:linux怎么在jvm启动参数
上一篇:怀化网站建设需注意哪些关键流程?
下一篇:linux怎么在jvm启动参数

