详解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中使用与Perl兼容的正则表达式
Nov 26 PHP
《PHP边学边教》(02.Apache+PHP环境配置――上篇)
Dec 13 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
ThinkPHP实现多数据库连接的解决方法
Jul 01 PHP
PHP生成不重复随机数的方法汇总
Nov 19 PHP
php实现监控varnish缓存服务器的状态
Dec 30 PHP
php插入排序法实现数组排序实例
Feb 16 PHP
分享10段PHP常用代码
Nov 11 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
Mar 21 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
浅谈PHP中如何实现Hook机制
Nov 14 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针对数字的加密解密类
2014/03/20 PHP
php支付宝手机网页支付类实例
2015/03/04 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
jQuery.extend 函数详解
2012/02/03 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
JavaScript数据类型之基本类型和引用类型的值
2015/04/01 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
Angular 实现输入框中显示文章标签的实例代码
2018/11/07 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
在python中使用xlrd获取合并单元格的方法
2018/12/26 Python
python使用knn实现特征向量分类
2018/12/26 Python
python学生管理系统开发
2019/01/30 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
解决tensorflow打印tensor有省略号的问题
2020/02/04 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
HTML table 表格边框的实现思路
2019/10/12 HTML / CSS
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
毕业生的自我评价
2013/12/30 职场文书
初中数学教学反思
2014/01/16 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
研究生就业推荐表导师评语
2014/12/31 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang