详解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 相关文章推荐
桌面中心(四)数据显示
Oct 09 PHP
linux下 C语言对 php 扩展
Dec 14 PHP
PHP 开发环境配置(Zend Server安装)
Apr 28 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
Jan 10 PHP
php实现memcache缓存示例讲解
Dec 04 PHP
php中session退出登陆问题
Feb 27 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
Nov 20 PHP
PHP版微信公众平台红包API
Apr 02 PHP
PHP SPL标准库之SplFixedArray使用实例
May 12 PHP
详谈PHP编码转换问题
Jul 28 PHP
php 读取输出其他文件的实现方法
Jul 26 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
Nov 24 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
php操作SVN版本服务器类代码
2011/11/27 PHP
PHP获取MAC地址的具体实例
2013/12/13 PHP
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
js实现文本框选中的方法
2015/05/26 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
python getopt 参数处理小示例
2009/06/09 Python
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
python学生信息管理系统(完整版)
2020/04/05 Python
修改python plot折线图的坐标轴刻度方法
2018/12/13 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
介绍一下linux文件系统分配策略
2013/02/25 面试题
学生保证书
2015/01/16 职场文书
2015年母亲节寄语
2015/03/23 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
Python中的 No Module named ***问题及解决
2022/07/23 Python