详解Yii2.0使用AR联表查询实例

发布时间 - 2026-01-11 01:54:44    点击率:

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'], 
  ], 
]); ?> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Yii AR 联表查询  # yii2.0联表查询  # yii2.0 两表联查  # 第一个  # 中文网  # 第二个  # 有两种  # 贴出  # 第二种  # 要使  # 第一种  # 大家多多  # 以供  # 文章分类  # 则说  # extends  # brush  # php  # pre  # class  # Article  # yii  # static 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现用户注册和登录?(Auth脚手架指南)  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  javascript基本数据类型及类型检测常用方法小结  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  如何在IIS7中新建站点?详细步骤解析  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Java垃圾回收器的方法和原理总结  香港服务器网站卡顿?如何解决网络延迟与负载问题?  如何续费美橙建站之星域名及服务?  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  免费网站制作appp,免费制作app哪个平台好?  Laravel如何使用Gate和Policy进行授权?(权限控制)  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  php结合redis实现高并发下的抢购、秒杀功能的实例  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  Laravel如何使用.env文件管理环境变量?(最佳实践)  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  三星、SK海力士获美批准:可向中国出口芯片制造设备  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  无锡营销型网站制作公司,无锡网选车牌流程?  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  焦点电影公司作品,电影焦点结局是什么?  JavaScript如何实现继承_有哪些常用方法  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  微信小程序 require机制详解及实例代码  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  奇安信“盘古石”团队突破 iOS 26.1 提权  Laravel如何创建自定义Facades?(详细步骤)  香港服务器租用每月最低只需15元?  Java类加载基本过程详细介绍  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  详解Huffman编码算法之Java实现  非常酷的网站设计制作软件,酷培ai教育官方网站?  网站制作报价单模板图片,小松挖机官方网站报价?  高防服务器租用如何选择配置与防御等级?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  如何登录建站主机?访问步骤全解析  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  如何快速查询域名建站关键信息?  Linux网络带宽限制_tc配置实践解析【教程】  昵图网官网入口 昵图网素材平台官方入口  Linux后台任务运行方法_nohup与&使用技巧【技巧】