详解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
PHP5中新增stdClass 内部保留类
Jun 13 PHP
php设置编码格式的方法
Mar 05 PHP
控制PHP的输出:缓存并压缩动态页面
Jun 11 PHP
PHP分页详细讲解(有实例)
Oct 30 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
ThinkPHP实现带验证码的文件上传功能实例
Nov 01 PHP
php将access数据库转换到mysql数据库的方法
Dec 24 PHP
php提交post数组参数实例分析
Dec 17 PHP
ThinkPHP中order()使用方法详解
Apr 19 PHP
Yii框架常见缓存应用实例小结
Sep 09 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定时自动生成静态HTML的实现代码
2010/06/20 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
2013/11/26 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
PHP上传文件参考配置大文件上传
2015/12/16 PHP
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
JS 控制非法字符的输入代码
2009/12/04 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
Vue 短信验证码组件开发详解
2017/02/14 Javascript
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
2020/04/21 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
关于微信公众号开发无法支付的问题解决
2018/12/28 Javascript
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
详解Python中内置的NotImplemented类型的用法
2015/03/31 Python
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
python使用win32com库播放mp3文件的方法
2015/05/30 Python
Python中几种导入模块的方式总结
2017/04/27 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
工程售后服务方案
2014/06/08 职场文书
暑期学习心得体会
2014/09/02 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers
mybatis 获取更新记录的id
2022/05/20 Java/Android