1. 云栖社区>
  2. PHP教程>
  3. 正文

Yii2的ActiveRecord与ActiveQuery简单介绍

作者:用户 来源:互联网 时间:2017-12-01 19:40:58

简单activerecordyii2介绍ActiveQuery

Yii2的ActiveRecord与ActiveQuery简单介绍 - 摘要: 本文讲的是Yii2的ActiveRecord与ActiveQuery简单介绍,活动记录 活动记录为与数据库中某张表中的某条记录相关联的对象,我们通过调用此对象的 CURD方法对记录进行操作,Yii2的活动记录其实很标准,AR 类为模型Model,对应数据表,AR 类的实例为活动记录,对应表中某条记录。 在 Yi

活动记录

活动记录为与数据库中某张表中的某条记录相关联的对象,我们通过调用此对象的 CURD方法对记录进行操作,Yii2的活动记录其实很标准,AR 类为模型Model,对应数据表,AR 类的实例为活动记录,对应表中某条记录。


在 Yii2 中活动记录为 AR 的实例,对应数据表中的某条记录。


AR 的实例本身作为一条数据表中的记录不应该承担对表级别的操作,所以 Yii2 将此任务赋予了 AR 及其子类(我们自己写model)。我们可以调用相关的 类方法(即静态方法)对表进行检索从而获取我们想要的活动记录,当然,这些静态方法也可以被此模型的实例所使用(静态方法的特性)


ActiveRecord 的 ORM 操作标准:


1、通过 AR 类访问数据库,检索其所对应的数据表获得符合条件的活动记录


2、对活动记录进行CURD操作


Yii2 的 AR 是通过调用 AQ 对其所关联的表进行检索操作,以下 AR 方法会返回 AQ 对象


User::find()//生成与当前AR所关联的表的AQ对象
User::findBySql($sql)//根据语句生成相对应AQ对象$sql="select*fromyii_userwhereid=1"

当进行关联查询的时候则是通过已经确定的活动记录对关联表进行条件检索


//关联查询时生成AQ$user->hasOne(Order::className(),['uid'=>'id'])将订单表与用户关联
$user->hasMany()
//关联查询时生成AQ$user->hasOne(Order::className(),['uid'=>'id'])将订单表与用户关联
$user->hasOne()

AQ则可以通过调用一下方法对数据表进行检索


AQ->where()->groupBy()->having()->orderBy()->offset()->limit()->all()/One();

在最后通过 all 或 one 方法返回符合条件的活动记录(模型的实例),当然也可以使 asArray() 返回数组集合


<?php
namespaceapp/models;
useyii/db/ActiveRecord;
classUserextendsActiveRecord{
publicstaticfunctiontableName(){
//如果db配置中开启了tablePrefix=>'tabPre'的参数设置这里可以自动返回表全称
retrun"{{%_tabName}}";
}
publicfunctiongetUserOrders(){
return$this->hasMany(Cart::className(),['uid'=>'id'])->asArray()->all();
}
}
?>
<?php
namespaceapp/controllers;
useYii;
useyii/web/Controller;
useapp/models/User;
classIndexControllerextendsController{
publicfunctionactionOrders($id){
$user=User::findOne($id);//通过AR类对yii_user表进行检索返回符合条件的活动记录
//$user=(newUser())->findOne($id);//这样也可以不过很别扭一条空活动记录去检索整个表越权了
$orders=$user->getUserOrders();//活动记录调用关联查询获取订单
}
}
?>

此外 Yii 还可以通过以下方法获取活动记录


User::findOne(['id'=>1]);
User::findAll(['status'=>1]);

TP 的 AR 并不是很标准,TP 自己再 AR 章节也说了,TP 的 AR 类型如下


Database -> ModelObj-> ModelObj->find() -> AR -> AR CURD


恩,严格来说 TP 并没有 ActiveRecord类,所有的对表操作都是基于 Model 类型的,Model 的实例在使用 find()方法后就成为一条 AR 对象.....而且这货还是个多功能的AR对象....


$user=newHome/Model/User();//D('user')..这里获得一条Model的实例....
$user->find(1);//然后这个Model实例就成为了AR不要忘了find平时的用法这里也会返回表记录的数组
$userInfo=$user->find(1);//而且这货还可以这样用直接就给你数组了....
$user->username="sallency";
$user->save();

看的可能有些晕吧,记住就好......

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索简单 , activerecord , yii2 , 介绍 ActiveQuery ,以便于您获取更多的相关知识。