详解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 相关文章推荐
APMServ使用说明
Oct 23 PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 PHP
php获取用户IPv4或IPv6地址的代码
Nov 15 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
Jun 01 PHP
PHP实现根据设备类型自动跳转相应页面的方法
Jul 24 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
Jun 17 PHP
php生出随机字符串
Jul 06 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 PHP
Laravel 加载第三方类库的方法
Apr 20 PHP
php中上传文件的的解决方案
Sep 25 PHP
java解析json方法总结
May 16 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
Apr 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
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
js以对象为索引的关联数组
2010/07/04 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
用JS实现选项卡
2020/03/23 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
使用Python开发windows GUI程序入门实例
2014/10/23 Python
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
Django自定义用户表+自定义admin后台中的字段实例
2019/11/18 Python
移动端HTML5实现文件上传功能【附代码】
2016/03/25 HTML / CSS
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
实习生单位鉴定意见
2013/12/04 职场文书
机修工工作职责
2014/02/21 职场文书
英文请假条
2014/04/11 职场文书
安全生产管理责任书
2014/04/16 职场文书
演讲稿格式
2014/04/30 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
2014年班组长工作总结
2014/11/20 职场文书
实习护士自荐信
2015/03/25 职场文书
2016公司年会通知范文
2015/04/25 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android