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


Posted in PHP onJune 16, 2017

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'], 
  ], 
]); ?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
使用php+xslt在windows平台上
Oct 09 PHP
用PHP实现小型站点广告管理(修正版)
Oct 09 PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 PHP
PHP+XML 制作简单的留言本 图文教程
Nov 02 PHP
基于header的一些常用指令详解
Jun 06 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
Mar 25 PHP
浅谈php的优缺点
Jul 14 PHP
php通过两层过滤获取留言内容的方法
Jul 11 PHP
php获取ip及网址的简单方法(必看)
Apr 01 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 PHP
yii2的restful api路由实例详解
May 14 PHP
详解Yii2 之 生成 URL 的方法
Jun 16 #PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
Jun 16 #PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 #PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 15 #PHP
php7基于递归实现删除空文件夹的方法示例
Jun 15 #PHP
php实现的二叉树遍历算法示例
Jun 15 #PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 #PHP
You might like
PHP4引用文件语句的对比
2006/10/09 PHP
PHP定时任务延缓执行的实现
2014/10/08 PHP
js 获取浏览器高度和宽度值(多浏览器)
2009/09/02 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
js实现图片轮播效果
2015/12/19 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
react-native封装插件swiper的使用方法
2018/03/20 Javascript
SVG实现时钟效果
2018/07/17 Javascript
解决bootstrap-select 动态加载数据不显示的问题
2018/08/10 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
Vuejs通过拖动改变元素宽度实现自适应
2020/09/02 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
python将unicode转为str的方法
2017/06/21 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
2018/02/21 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
Python实现的个人所得税计算器示例
2018/06/01 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
django框架模板语言使用方法详解
2019/07/18 Python
python 循环数据赋值实例
2019/12/02 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
python实现吃苹果小游戏
2020/03/21 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
HTML5 Video标签的属性、方法和事件汇总介绍
2015/04/24 HTML / CSS
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
转让协议书范本
2014/04/15 职场文书
会计人员岗位职责
2015/02/03 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
python中的sys模块和os模块
2022/03/20 Python