活动记录为与数据库中某张表中的某条记录相关联的对象,咱们经过调用此对象的 CURD方法对记录进行操做,Yii2的活动记录其实很标准,AR 类为模型Model,对应数据表,AR 类的实例为活动记录,对应表中某条记录。php
在 Yii2 中活动记录为 AR 的实例,对应数据表中的某条记录。web
AR 的实例自己做为一条数据表中的记录不该该承担对表级别的操做,因此 Yii2 将此任务赋予了 AR 及其子类(咱们本身写model)。咱们能够调用相关的 类方法(即静态方法)对表进行检索从而获取咱们想要的活动记录,固然,这些静态方法也能够被此模型的实例所使用(静态方法的特性)sql
ActiveRecord 的 ORM 操做标准:数据库
一、经过 AR 类访问数据库,检索其所对应的数据表得到符合条件的活动记录数组
二、对活动记录进行CURD操做app
Yii2 的 AR 是经过调用 AQ 对其所关联的表进行检索操做,如下 AR 方法会返回 AQ 对象yii
User::find() //生成与当前AR所关联的表的AQ对象 User::findBySql($sql) //根据语句生成相对应AQ对象 $sql = "select * from yii_user where id = 1"
当进行关联查询的时候则是经过已经肯定的活动记录对关联表进行条件检索ui
//关联查询时生成AQ $user->hasOne(Order::className(), ['uid' => 'id']) 将订单表与用户关联 $user->hasMany() //关联查询时生成AQ $user->hasOne(Order::className(), ['uid' => 'id']) 将订单表与用户关联 $user->hasOne()
AQ则能够经过调用一下方法对数据表进行检索this
AQ->where()->groupBy()->having()->orderBy()->offset()->limit()->all()/One();
在最后经过 all 或 one 方法返回符合条件的活动记录(模型的实例),固然也可使 asArray() 返回数组集合spa
<?php namespace app\models; use yii\db\ActiveRecord; class User extends ActiveRecord { public static function tableName() { //若是db配置中开启了 tablePrefix => 'tabPre' 的参数设置 这里能够自动返回表全称 retrun "{{%_tabName}}"; } public function getUserOrders() { return $this->hasMany(Cart::className(), ['uid' => 'id'])->asArray()->all(); } } ?> <?php namespace app\controllers; use Yii; use yii\web\Controller; use app\models\User; class IndexController extends Controller { public function actionOrders($id) { $user = User::findOne($id); //经过 AR 类对 yii_user 表进行检索返回符合条件的活动记录 // $user = (new User())->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 = new Home\Model\User(); // D('user')..这里得到一条 Model 的实例.... $user->find(1); // 而后这个Model实例就成为了 AR 不要忘了find平时的用法 这里也会返回表记录的数组 $userInfo = $user->find(1); // 并且这货还能够这样用 直接就给你数组了.... $user->username = "sallency"; $user->save();
看的可能有些晕吧,记住就好......