详解Yii2.0使用AR联表查询实例
时间:2019-03-30
本文章向大家介绍详解Yii2.0使用AR联表查询实例,主要包括详解Yii2.0使用AR联表查询实例使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Yii2.0中使用联表查询有两种办法,第一种是查询构建器(Query Builder),第二种使用活动记录(Active Record),中文网对查询构建器讲的很详细,AR则说的很坑爹,下面贴出自己实践的方法,以供参考。
两个表
{{%article}} 和 {{%article_class}}
{{%article}} .article_class关联{{%article_class}}.id
1、要使用AR做关联查询,首先在models {Article} 中创建关联:
class Article extends \yii\db\ActiveRecord { //这里声明被关联字段 public $class_name; /** * @inheritdoc */ public static function tableName() { return '{{%article}}'; } ... //关联 mysite_article_class 表 public function getArticleClass(){ /** * 第一个参数为要关联的子表模型类名称, * 第二个参数指定通过子表的 id 去关联主表的 article_class 字段 */ return $this->hasMany(ArticleClass::className(), ['id' => 'article_class']); } }
2、在controllers {ArticleController}中使用,
public function actionIndex() { $article = new Article(); if(Yii::$app->request->get('class')){ $query = Article::find() ->joinWith('articleClass') ->select(['{{%article}}.*,{{%article_class}}.class_name']) ->where(['article_class' => Yii::$app->request->get('class')]); $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); }else{ $query = Article::find() ->joinWith('articleClass') ->select(['{{%article}}.*,{{%article_class}}.class_name']); $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); } return $this->render('index', [ 'dataProvider' => $dataProvider, 'model' => $article, ]); }
3、在view {GridView}中使用
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'id', //'article_content:ntext', [ 'value'=>'class_name', 'label'=>'文章分类', ], 'article_title', 'article_addtime:datetime', // 'article_updatetime:datetime', // 'article_author', ['class' => 'yii\grid\ActionColumn'], ], ]); ?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- GNU tar 解压路径绕过漏洞(CVE-2016-6321) 分析
- Memcached 命令执行漏洞(CVE-2016-8704、CVE-2016-8705、CVE-2016-8706)简析
- 使用Hue创建Ssh的Oozie工作流时重定向输出日志报错分析
- Joomla未授权创建特权用户漏洞(CVE-2016-8869)分析
- 检测本地文件躲避安全分析
- 如何在Kerberos的Linux上安装及配置Impala的ODBC驱动
- 对抗静态分析——so文件的加密
- Bypass unsafe-inline mode CSP
- Joomla未授权创建用户漏洞(CVE-2016-8870)分析
- 如何将HDFS文件系统挂载到Linux本地文件系统
- 使用 XML 内部实体绕过 Chrome 和 IE 的 XSS 过滤器
- 响应式编程的实践
- S2-045 原理初步分析(CVE-2017-5638)
- 如何在HDFS上查看YARN历史作业运行日志
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android编程实现播放视频时切换全屏并隐藏状态栏的方法
- Android UI设计与开发之仿人人网V5.9.2最新版引导界面
- PopupWindow使用方法详解
- Android 中cookie的处理详解
- Android UI设计与开发之ViewPager仿微信引导界面以及动画效果
- Android UI设计与开发之ViewPager介绍和简单实现引导界面
- Android RollPagerView实现轮播图
- Android UI设计与开发之使用ViewPager实现欢迎引导页面
- Android ListView里控件添加监听方法的实例详解
- Android实现底部图片选择Dialog
- AndroidImageSlider实现炫酷轮播广告效果
- Android获取手机本机号码的实现方法
- Android中RecyclerView的item宽高问题详解
- Andoroid实现底部图片选择Dialog效果
- Android中ExpandableListView使用示例详解