详解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中操作MySQL数据库的一些要注意的问题
Oct 09 PHP
新浪新闻小偷
Oct 09 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
php下把数组保存为文件格式的实例应用
Feb 08 PHP
注意:php5.4删除了session_unregister函数
Aug 05 PHP
php smarty truncate UTF8乱码问题解决办法
Jun 13 PHP
php常用的url处理函数总结
Nov 19 PHP
PHP中使用php://input处理相同name值的表单数据
Feb 03 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
Jul 03 PHP
PHP实现递归无限级分类
Oct 22 PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 PHP
Smarty环境配置与使用入门教程
May 11 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
利用js调用后台php进行数据处理原码
2006/10/09 PHP
PHP+MYSQL的文章管理系统(二)
2006/10/09 PHP
神盾加密解密教程(一)PHP变量可用字符
2014/05/28 PHP
Yii分页用法实例详解
2014/12/04 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
Firefox outerHTML实现代码
2009/06/04 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
jQuery EasyUI菜单与按钮详解
2016/07/13 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
[01:32]2014DOTA2西雅图邀请赛 CIS我们有信心进入正赛
2014/07/08 DOTA
Python列表推导式的使用方法
2013/11/21 Python
详细介绍Python中的偏函数
2015/04/27 Python
利用pyinstaller将py文件打包为exe的方法
2018/05/14 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
python编辑用户登入界面的实现代码
2018/07/16 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
Python3进制之间的转换代码实例
2019/08/24 Python
python nmap实现端口扫描器教程
2020/05/28 Python
详解Django配置优化方法
2019/11/18 Python
全神贯注教学反思
2014/02/03 职场文书
厉行勤俭节约倡议书
2014/05/16 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL