详解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 strlen mb_strlen计算中英文混排字符串长度
Jul 10 PHP
用PHP将网址字符串转换成超链接(网址或email)
May 25 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
Aug 02 PHP
PHP动态编译出现Cannot find autoconf的解决方法
Nov 05 PHP
一个比较不错的PHP日历类分享
Nov 18 PHP
PHP多线程类及用法实例
Dec 03 PHP
php使用wordwrap格式化文本段落的方法
Mar 17 PHP
2款PHP无限级分类实例代码
Nov 11 PHP
php查询操作实现投票功能
May 09 PHP
微信公众号开发之文本消息自动回复php代码
Aug 08 PHP
PHP正则判断一个变量是否为正整数的方法
Feb 27 PHP
php实现的数组转xml案例分析
Sep 28 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分页函数
2006/10/09 PHP
php下使用无限生命期Session的方法
2007/03/16 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
兼容PHP和Java的des加密解密代码分享
2014/06/26 PHP
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
JS获取后台Cookies值的小例子
2013/03/04 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
Vue-Router进阶之滚动行为详解
2017/09/13 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
vue项目关闭eslint校验
2018/03/21 Javascript
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
python+POP3实现批量下载邮件附件
2018/06/19 Python
python制作抖音代码舞
2019/04/07 Python
python3使用腾讯企业邮箱发送邮件的实例
2019/06/28 Python
python调用webservice接口的实现
2019/07/12 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
python飞机大战游戏实例讲解
2020/12/04 Python
英文简历中的自我评价用语
2013/12/09 职场文书
护理学专业求职信
2014/06/29 职场文书
批评与自我批评总结
2014/10/17 职场文书
英文慰问信范文
2015/03/24 职场文书
青年联谊会致辞
2015/07/31 职场文书
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android