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

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

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

(0)

相关推荐

  • yii框架搜索分页modle写法

    控制器层 <?PHP namespace frontend\controllers; header('content-type:text/html;charset=utf-8'); use Yii; use yii\base\InvalidParamException; use yii\web\BadRequestHttpException; use yii\web\Controller; use yii\filters\VerbFilter; use yii\filters\AccessCon

  • YII框架中搜索分页jQuery写法详解

    控制层 use frontend\models\StudUser; use yii\data\Pagination; use yii\db\Query; /** * 查询 * */ public function actionSearch() { //接值 $where=Yii::$app->request->get(); //实例化query $query=new Query(); $query->from('stud_user'); //判断 if(isset($where['sex

  • Yii 2.0实现联表查询加搜索分页的方法示例

    前言 最近在学习yii2.0,在使用yii2.0过程中遇到一些问题,现将查询搜索分页的方法整理如下,分享出来供大家参考学习,话不多说,来一起看看详细的介绍: 主表:{{%article}} 关联表:{{%article_class}} 方法如下 1.使用gii创建CRUD和search不详述 2.在Article中添加的关联内容,代码#注释部分 class Article extends \yii\db\ActiveRecord { #关联查询1:这里加上被关联字段 public $class_

  • Yii框架结合sphinx,Ajax实现搜索分页功能示例

    本文实例讲述了Yii框架结合sphinx,Ajax实现搜索分页功能的方法.分享给大家供大家参考,具体如下: 效果图: 控制器: <?php namespace backend\controllers; use Yii; use yii\web\Controller; use yii\data\Pagination; use SphinxClient; use yii\db\Query; use yii\widgets\LinkPager; use backend\models\Goods; cl

  • yii2实现分页,带搜索的分页功能示例

    一.模型配置 事例会用到三个models.文章类别表和文章表用gii生成下即可,最后一个是搜索验证模型.其中,只讲下一个联表和搜索验证.其他不用操作. 1.文章表关联 <?php //...other code //关联 public function getCate(){ return $this->hasOne(ArticleCate::className(),['id' => 'cid']); } ?> 2.搜索模型 common/models/search/创建Articl

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

    Yii2.0中使用联表查询有两种办法,第一种是查询构建器(Query Builder),第二种使用活动记录(Active Record),中文网对查询构建器讲的很详细,AR则说的很坑爹,下面贴出自己实践的方法,以供参考. 两个表 {{%article}} 和 {{%article_class}} {{%article}} .article_class关联{{%article_class}}.id 1.要使用AR做关联查询,首先在models {Article} 中创建关联: class Arti

  • 详解Yii2.0 rules验证规则集合

    我最近也在学习Yii2的路上,那么今天也算个学习笔记吧! required : 必须值验证属性 复制代码 代码如下: [['字段名'],required,'requiredValue'=>'必填值','message'=>'提示信息']; #说明:CRequiredValidator 的别名, 确保了特性不为空. email : 邮箱验证 复制代码 代码如下: ['email', 'email']; #说明:CEmailValidator的别名,确保了特性的值是一个有效的电邮地址. match

  • 详解MySQL8.0​ 字典表增强

    MySQL中数据字典是数据库重要的组成部分之一,INFORMATION_SCHEMA首次引入于MySQL 5.0,作为一种从正在运行的MySQL服务器检索元数据的标准兼容方式.用于存储数据元数据.统计信息.以及有关MySQL server的访问信息(例如:数据库名或表名,字段的数据类型和访问权限等). 8.0之前: 1.元数据来自文件 2.采用MEMORY表引擎 3.frm文件 存放表结构信息 4.opt文件,记录了每个库的一些基本信息,包括库的字符集等信息 5..TRN,.TRG文件用于存放触

  • Spring JPA联表查询之OneToOne源码详解

    目录 前言 源码 注解属性 单向联表 user 实体类 car 实体类 查询结果 双向联表 user 实体 car 实体 查询结果 延迟加载(懒加载) user 实体 查询结果: 查询完会发现,控制台又打印了一个 JPQL: 最后结论 前言 前面几篇我们学习的都是单表查询,就是对一张表中的数据进行查询.而实际项目中,基本都会有多张表联合查询的情况,今天我们就来了解下JPA的联表查询是如做的. 源码 @OneToOne 注解实现一对一关系映射.比如用户跟车辆的关系(这里假设一个人只能有一辆车),一

  • Yii2.0框架模型多表关联查询示例

    本文实例讲述了Yii2.0框架模型多表关联查询.分享给大家供大家参考,具体如下: 联表查询--hasMany: use app\models\User; $right = Right::findOne(2); //$user = User::find()->where(['right_id' => $right->attributes['id']])->all(); $user = $right->hasMany(User::className(),['right_id' =

  • 详解MySQL8.0原子DDL语法

    01 原子DDL介绍 原子DDL语句将数据字典更新.存储引擎操作和与DDL操作相关联的二进制日志写入合并到单个原子操作中.该操作要么提交,对数据字典.存储引擎和二进制日志保留适用的更改,要么回滚. 在MySQL8.0中,原子DDL操作这一特性,支持表相关操作,例如create table.drop table等,也支持非表相关操作,例如create routine.drop trigger等. 其中: 支持的表操作包含: drop.create.alter(操作对象是databases, tab

  • 详解TypeScript2.0标记联合类型

    目录 使用标记的联合类型构建付款方式 使用标记联合类型构建 Redux 操作 never 类型 永不返回的函数 不可能有该类型的变量 never 和 void 之间的区别 函数声明的类型推断 使用标记的联合类型构建付款方式 假设咱们为系统用户可以选择的以下支付方式建模 Cash (现金) PayPal 与给定的电子邮件地址 Credit card 带有给定卡号和安全码 对于这些支付方法,咱们可以创建一个 TypeScript 接口 interface Cash { kind: "cash&quo

  • 详解 swift3.0 可选绑定共用同一块内存空间的实例

    详解 swift3.0 可选绑定共用同一块内存空间的实例 示例代码: ljTempModel = UserModel.init(userName: "sww", userID: 12, phone: "123", email: "deew") ljTempModel?.ljArray.append("sww") print("可选绑定前:\(ljTempModel?.ljArray)") //可选绑定成功,

  • 详解vue3.0 diff算法的使用(超详细)

    前言:随之vue3.0beta版本的发布,vue3.0正式版本相信不久就会与我们相遇.尤玉溪在直播中也说了vue3.0的新特性typescript强烈支持,proxy响应式原理,重新虚拟dom,优化diff算法性能提升等等.小编在这里仔细研究了vue3.0beta版本diff算法的源码,并希望把其中的细节和奥妙和大家一起分享. 首先我们来思考一些大中厂面试中,很容易问到的问题: 1 什么时候用到diff算法,diff算法作用域在哪里? 2 diff算法是怎么运作的,到底有什么作用? 3 在v-f

  • 详解MySQL8.0 密码过期策略

    MySQL8.0.16开始,可以设置密码的过期策略,今天针对这个小的知识点进行展开. 1.手工设置单个密码过期 MySQL8.0中,我们可以使用alter user这个命令来让密码过期. 首先我们创建账号yeyz,密码是yeyz [root@VM-0-14-centos ~]# /usr/local/mysql-8.0.19-el7-x86_64/bin/mysql -uyeyz -pyeyz -h127.0.0.1 -P4306 -e "select 1" mysql: [Warni

随机推荐