文档章节

Yii2的ActiveRecord与ActiveQuery简单介绍

big_cat
 big_cat
发布于 2016/04/18 16:59
字数 880
阅读 2464
收藏 1
活动记录

        活动记录为与数据库中某张表中的某条记录相关联的对象,我们通过调用此对象的 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 * from yii_user where id = 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
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();

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

© 著作权归作者所有

共有 人打赏支持
big_cat
粉丝 46
博文 224
码字总数 149332
作品 0
长宁
后端工程师
私信 提问
面向对象的一小步:添加ActiveRecord的Scope功能

问题场景 我们用Yii2的ActiveRecord功能非常的方便,假如我们有个Model叫Student,那么ActiveQuery可以通过这种方式轻便地获得: 然后,我们就可以在$query上继续使用各种方法添加SQL Claus...

米粒人生
07/25
0
0
PHP框架 -- Yii 1.0.5 发布

Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序...

红薯
2009/05/11
271
0
话说围观PHP框架之后的感悟

不知今天发了什么神经,突然对PHP大发感悟。菜鸟,初学不久,胡乱说的,表示对以下言论不负责。但是灰常欢迎拍砖或除人身攻击和无意义嘲讽外的任何方式批评。 主要是研究了一段时间Zend Fram...

ValueError
2010/11/08
6.8K
17
Yii CDbCriteria 常用方法

Yii CDbCriteria 常用方法 注:$c = new CDbCriteria();是ActiveRecord的一种写法,使ActiveRecord更加灵活,而不是手册中DAO(PDO)和Query Builder。 这是Yii CDbCriteria的一些笔记和常用...

Neo_
2013/10/03
0
0
PHP框架 Yii 1.1 Beta 发布

Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序...

红薯
2009/11/02
195
0

没有更多内容

加载失败,请刷新页面

加载更多

iOS 官方文档

https://developer.apple.com/library/prerelease/content/navigation/#section=Platforms&topic=iOS...

walking_yxf
5分钟前
0
0
使用Mycat实现MySQL数据库的读写分离

前提准备 1.一台CentOS机器 2.Mycat安装包 (http://www.mycat.io/) 安装使用 1.解压Mycat的安装包到/user/local/下 2.设置mycat的环境变量 vi /etc/profile 3.使配置文件立即生效 source /...

吴伟祥
6分钟前
0
0
Aries数据库事务Recovery算法

背景知识 本文是一篇关于(分布式)数据库的文章,在开始阐述Aries是什么之前,需要先交代几个常识性的概念,这些概念对后文引出Aries显得尤为重要。 数据库体系结构 图1大致描述了一个(分布...

黑客画家
9分钟前
0
0
Rxjava Backpressure 32

原文:https://github.com/Froussios/Intro-To-RxJava/blob/master/Part 4 - Concurrency/4. Backpressure.md Rx将事件从管道的一端引导到另一端,在每一端发生的行动可能非常不同。当生产者...

woshixin
9分钟前
0
0
IDEA-Create Git Repository

1、概述 idea 开发完毕的项目没有及时的关联gitlab,如果整体项目关联gitlab。 2、干 2.1 gitlab 创建项目 2.2 idea 1、IDEA 点击 -> VCS -> import into version control -> create git re......

来来来来来
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部