详解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 相关文章推荐
一个没有MYSQL数据库支持的简易留言本的编写
Oct 09 PHP
PHP控制网页过期时间的代码
Sep 28 PHP
php 正则匹配函数体
Aug 25 PHP
php中截取中文字符串的代码小结
Jul 17 PHP
php输出xml格式字符串(用的这个)
Jul 12 PHP
php daddslashes()和 saddslashes()有哪些区别分析
Oct 26 PHP
php读取文件内容的几种方法详解
Jun 26 PHP
ThinkPHP3.1新特性之G方法的使用
Jun 19 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 PHP
PHP加密解密实例分析
Dec 25 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
Mar 08 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
Jul 25 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
数字转英文
2006/12/06 PHP
PHP 图片上传实现代码 带详细注释
2010/04/29 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
js 覆盖和重载 函数
2009/09/25 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
如何使用Javascript获取距今n天前的日期
2013/07/08 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
jQuery表格列宽可拖拽改变且兼容firfox
2014/09/03 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
js实现百度淘宝搜索功能
2020/02/17 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
[17:36]VG战队纪录片
2014/08/21 DOTA
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
Python中用Decorator来简化元编程的教程
2015/04/13 Python
Python中join和split用法实例
2015/04/14 Python
利用Python如何生成随机密码
2016/04/20 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
python 实现二维列表转置
2019/12/02 Python
Python字典底层实现原理详解
2019/12/18 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
django form和field具体方法和属性说明
2020/07/09 Python
美国用餐电影院:Alamo Drafthouse Cinema
2020/01/23 全球购物
保护环境建议书300字
2014/05/13 职场文书
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers