文档章节

Yii2的ActiveRecord与ActiveQuery简单介绍

big_cat
 big_cat
发布于 2016/04/18 16:59
字数 880
阅读 2316
收藏 1
点赞 1
评论 0
活动记录

        活动记录为与数据库中某张表中的某条记录相关联的对象,我们通过调用此对象的 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
博文 189
码字总数 141724
作品 0
长宁
后端工程师
PHP 开发框架 CakePHP 3.6.1 发布,改进 API 文档

CakePHP 3.6.1 已发布,这是 3.6 分支的最新维护版本,修复了几个社区报告的问题: Improve deprecation warning message for controller properties. Deprecation warning messages now in...

王练 ⋅ 04/22 ⋅ 0

PHP 开发框架 CakePHP 3.6.2 发布,bug 修复版本

PHP 开发框架 CakePHP 3.6.2 发布,这是3.6版本分支的维护版本,修复了几个社区报告的问题。 Bug 修复: 修复了CSRF令牌验证中潜在的侧通道时序问题。 request->here 改进了弃用警告。 如果是...

雨田桑 ⋅ 04/29 ⋅ 0

yii2开发中19条推荐实践(阿北总结)

虽然每个人的编程风格不同,但是有些建议能让你的代码更加规范和稳定,本次就我这次网站更新总结如下几点,希望对你的yii2学习和使用有所帮助。 环境说明 服务器环境: CentOS 开发环境及IDE...

阿北2017 ⋅ 06/02 ⋅ 0

JAVA 极速WEB+ORM框架 - JFinal

JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、p...

JFinal ⋅ 2012/03/18 ⋅ 496

YII2.0 AcriveRecord的简单使用

这篇文章我们来看看在 Yii2 之中的 Active Record,为啥要将 Active Record 单独出来说呢?因为个人认为这是 Yii(不管是 Yii1.1 还是 Yii2)最强大的一部分功能之一,何况又遇上在 Yii2 中其...

bieru ⋅ 2015/05/10 ⋅ 0

Yii2如何实现用户登陆

这两天空的时候,看了下Yii2,然后按照官方教程,安装了Yii2基础版。最开始的问题,无非就是注册登陆等功能了,果然,Yii2基础版并不像高级版一样,可以直接导入创建好的数据库,只有的静态登...

卖小女孩的小火柴 ⋅ 2015/04/11 ⋅ 5

5月YII2学习总结

5月份YII2学习任务基本上告一段落了,总体感觉只是简单学习了YII2,可以进行基本的应用开发,文档没有全部看完,自己简单做了一个QA问答系统进行练手。 QA问答系统功能: 1、登陆、注册、收藏...

卖小女孩的小火柴 ⋅ 2015/05/25 ⋅ 2

Yii2框架的几个隐蔽的坑

Yii2框架的几个隐蔽的坑 摘要:Yii2是一款优秀的通用Web后端框架,结构简单优雅、实用功能丰富、扩展性强、性能搞是他最突出的优点。它优秀的地方你在使用过程中总能轻易的发现,无须赘述。而...

daniel-john ⋅ 2016/06/24 ⋅ 0

Yii2的GridView使用大全 --- 18个问答

经常有人问yii2的GridView配置问题,最近群里也有人问到,我想是时候发布一个教程了。 我们采用的是yii2.0.14版本,为了学习方便,以问答式书写。 开始GridView GridView主要是为了实现表格复...

阿北2017 ⋅ 06/14 ⋅ 0

yii 源码解读

date: 2017-11-21 18:15:18 title: yii 源码解读 百度脑图 - yii 源码解析: http://naotu.baidu.com/file/809da8891f960f0de1b3b50b1d44699a?token=836456d397b841d4 魏曦 - yii2 视频教程:......

daydaygo ⋅ 2017/12/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vbs 取文件大小 字节

dim namedim fs, s'name = Inputbox("姓名")'msgbox(name)set fs = wscript.createobject("scripting.filesystemobject") 'fs为FSO实例if (fs.folderexists("c:\temp"))......

vga ⋅ 5分钟前 ⋅ 0

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部