yii2增删改查及AR的理解
yii2增删改查
// 返回 id 为 1 的客户 $customer = Customer::findOne(1);
// 返回 id 为 1 且状态为 *active* 的客户 $customer = Customer::findOne([ 'id' => 1, 'status' => Customer::STATUS_ACTIVE, ]);
// 返回id为1、2、3的一组客户 $customers = Customer::findAll([1, 2, 3]);
// 返回所有状态为 "deleted" 的客户 $customer = Customer::findAll([ 'status' => Customer::STATUS_DELETED, ]);
// 插入新客户的记录 $customer = new Customer(); $customer->name = 'James'; $customer->email = 'james@example.com'; $customer->save();
// 等同于 $customer->insert();
$id = $model->attributes['id'];
Yii::$app->db->getLastInsertID()
// 更新现有客户记录 $customer = Customer::findOne($id); $customer->email = 'james@example.com'; $customer->save();
// 等同于 $customer->update();
// 删除已有客户记录 $customer = Customer::findOne($id); $customer->delete();
// 删除多个年龄大于20,性别为男(Male)的客户记录 Customer::deleteAll('age > :age AND gender = :gender', [':age' => 20, ':gender' => 'M']); // 所有客户的age(年龄)字段加1: Customer::updateAllCounters(['age' => 1]);
须知:
save() 方法会调用 insert()
和 update()
中的一个, 用哪个取决于当前 AR 对象是不是新对象(在函数内部,他会检查 yii\db\ActiveRecord::isNewRecord 的值)。
若 AR 对象是由 new
操作符 初始化出来的,save()
方法会在表里插入一条数据; 如果一个 AR 是由 find()
方法获取来的, 则 save()
会更新表里的对应行记录。
// 新建一条记录 $model = new Customer; if ($model->load(Yii::$app->request->post()) && $model->save()) { // 获取用户输入的数据,验证并保存 } // 更新主键为$id的AR $model = Customer::findOne($id); if ($model === null) { throw new NotFoundHttpException; } if ($model->load(Yii::$app->request->post()) && $model->save()) { // 获取用户输入的数据,验证并保存 }
对AR的理解
AR的生命周期
理解AR的生命周期对于你操作数据库非常重要。生命周期通常都会有些典型的事件存在。对于开发AR的behaviors来说非常有用。
当你实例化一个新的AR对象时,我们将获得如下的生命周期:
constructor
yii\db\ActiveRecord::init(): 会触发一个 yii\db\ActiveRecord::EVENT_INIT 事件
当你通过 find() 方法查询数据时,每个AR实例都将有以下生命周期:
constructor
yii\db\ActiveRecord::init(): 会触发一个 yii\db\ActiveRecord::EVENT_INIT 事件
yii\db\ActiveRecord::afterFind(): 会触发一个 yii\db\ActiveRecord::EVENT_AFTER_FIND 事件
当通过 yii\db\ActiveRecord::save() 方法写入或者更新数据时, 我们将获得如下生命周期:
yii\db\ActiveRecord::beforeValidate(): 会触发一个 yii\db\ActiveRecord::EVENT_BEFORE_VALIDATE 事件
yii\db\ActiveRecord::afterValidate(): 会触发一个 yii\db\ActiveRecord::EVENT_AFTER_VALIDATE 事件
yii\db\ActiveRecord::beforeSave(): 会触发一个 yii\db\ActiveRecord::EVENT_BEFORE_INSERT 或 yii\db\ActiveRecord::EVENT_BEFORE_UPDATE 事件
执行实际的数据写入或更新
yii\db\ActiveRecord::afterSave(): 会触发一个 yii\db\ActiveRecord::EVENT_AFTER_INSERT 或 yii\db\ActiveRecord::EVENT_AFTER_UPDATE 事件
最后,当调用 delete() 删除数据时, 我们将获得如下生命周期:
yii\db\ActiveRecord::beforeDelete(): 会触发一个 yii\db\ActiveRecord::EVENT_BEFORE_DELETE 事件
执行实际的数据删除
yii\db\ActiveRecord::afterDelete(): 会触发一个 yii\db\ActiveRecord::EVENT_AFTER_DELETE 事件
转载于:https://www.cnblogs.com/xiong63/p/6553692.html
yii2增删改查及AR的理解相关推荐
- mysql学习总结-初识+数据管理+增删改查+常用函数+事务理解+数据库设计+JDBC引入
1.初识MySQL 1.1数据库的定义 数据库(DataBase,简称DB),是一个按数据结构来存储和管理数据的计算机软件系统.每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制 ...
- 欢迎来到Jsp编程课时十二——今天实现的目标是。@1将数据库的数据发送到浏览器。@2利用浏览器实现对数据库的增删改查操作。@3理解MVC三层架构的定义。
完成项目会有以下的效果. JSP第二十课:Mvc+Mysql+Servlect+Jsp实现在浏览器上对数据库的增删改查. MVC全名是Model View Controller, 是 @@1模型(mo ...
- 原生YII2 增删改查的一些操作(非ActiveRecord)
1.添加数据 如下,使用insert方法:t_admin_user为数据表名..其他的是属性.. $num = Yii::$app->db->createCommand()->ins ...
- 数据增删改查之三层架构(理解三层续)
首先是画的图,感觉把图画完了,工程就完成了一大半,前提是画的思路是对的.还是在理解三层. 下面是画的关于数据的增删改查这个小例子的包图.类图和时序图. 包图. 类图. 时序图. 用户注册. 用户删除. ...
- Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法)
Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法) 目录 自定义创建数据库的各种表demo集合 具体案例 1.学生信息数据表案例
- java web期末课程设计 学生成绩管理系统(mysql,jstl+el,Javabean)+增删改查,session域+servlet(基础易理解)
学生成绩管理系统 一.实验目的 为了更好的学习理解JavaWeb,创建了此系统.此系统可以帮助学习Java web基础,特别是javaweb入门,此系统使用大部分Java web基础知识.Java w ...
- resultset mysql_MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...
[声明] 欢迎转载,但请保留文章原始出处→_→ [正文] 一.ResultSet接口的介绍: 对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查 ...
- 带头节点单链表的增删改查
单链表有很多结构循环单链表,有头节点的单链表,无头节点的单链表,双节点单链表,以下源码是以有一个头节点的单链表为例写的增删改查的各种功能,就是下图 然后各个注释也在函数后面写着,这玩意确实还挺难,源码 ...
- Spring Boot 中使用 MongoDB 增删改查
本文快速入门,MongoDB 结合SpringBoot starter-data-mongodb 进行增删改查 1.什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件 ...
最新文章
- linux批量创建用户和密码
- 基于.Net Core开发现代化Web应用程序系列课程和文章
- 接口测试01 - HTTP协议报文结构及示例
- 小程序 video 控制器外观调整_「小程序JAVA实战」小程序视频组件与api介绍(51)...
- 如何毕业后继续白嫖知网
- 大唐波斯将军 机器人_你的工作会被机器人取代吗?
作者:大唐波斯将军2015-04-08 09:34...
- python爬虫-初步使用Scrapy分布式爬虫(爬取mcbbs整合包保存名称及主要mod),大爱MC
- 改变Android的hello world程序字体颜色和背景颜色
- python消息队列框架持久化_消息队列如果持久化到数据库的话,相对于直接操作数据库有啥优势?...
- 神奇的applycall
- Java 工厂模式学习
- linux java xmx_linux应用实际内存大于 jvm xmx
- python请求库_如何使用Python请求库发出post请求?
- 【信息系统项目管理师】第12章-项目采购管理 知识点详细整理
- 如何用纯 CSS 创作一个 3D 文字跑马灯特效
- 在头文件中定义或声明变量
- 中国数控机床行业市场竞争态势及投资战略规划报告2022-2028年版
- php的get和post,PHP中GET和POST区别
- 在HTML中什么表示水平线,HTML中加入水平线的标签是( )
- SharePoint 读取选项字段所有Choise
热门文章
- 冒泡排序 快速排序 插入排序 选择排序
- JavaScript GetAbsoultURl
- list.action.php,doAction.php里代码可以这样写,大大减少了重复的代码
- ITK读取RGB图像像素值
- 如何使用War包部署Tomcat
- 用虚拟机安装了红帽后,我确实没设置用户名密码,但现在一打开就让输入用户名密码。这种情况该怎么办??
- mysql datetime 间隔,MySQL datetime默认时间间隔
- Matlab线性规划(Linear Programming)
- 话筒好坏测试软件,如何简单地判断麦克风的质量好坏?
- 【Java从入门到天黑|06】高质量男性SpringBoot入门及原理(基础总结版,强烈建议收藏)