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对象时,我们将获得如下的生命周期:

  1. constructor

  2. yii\db\ActiveRecord::init(): 会触发一个 yii\db\ActiveRecord::EVENT_INIT 事件

当你通过 find() 方法查询数据时,每个AR实例都将有以下生命周期:

  1. constructor

  2. yii\db\ActiveRecord::init(): 会触发一个 yii\db\ActiveRecord::EVENT_INIT 事件

  3. yii\db\ActiveRecord::afterFind(): 会触发一个 yii\db\ActiveRecord::EVENT_AFTER_FIND 事件

当通过 yii\db\ActiveRecord::save() 方法写入或者更新数据时, 我们将获得如下生命周期:

  1. yii\db\ActiveRecord::beforeValidate(): 会触发一个 yii\db\ActiveRecord::EVENT_BEFORE_VALIDATE 事件

  2. yii\db\ActiveRecord::afterValidate(): 会触发一个 yii\db\ActiveRecord::EVENT_AFTER_VALIDATE 事件

  3. yii\db\ActiveRecord::beforeSave(): 会触发一个 yii\db\ActiveRecord::EVENT_BEFORE_INSERT 或 yii\db\ActiveRecord::EVENT_BEFORE_UPDATE 事件

  4. 执行实际的数据写入或更新

  5. yii\db\ActiveRecord::afterSave(): 会触发一个 yii\db\ActiveRecord::EVENT_AFTER_INSERT 或 yii\db\ActiveRecord::EVENT_AFTER_UPDATE 事件

最后,当调用 delete() 删除数据时, 我们将获得如下生命周期:

  1. yii\db\ActiveRecord::beforeDelete(): 会触发一个 yii\db\ActiveRecord::EVENT_BEFORE_DELETE 事件

  2. 执行实际的数据删除

  3. yii\db\ActiveRecord::afterDelete(): 会触发一个 yii\db\ActiveRecord::EVENT_AFTER_DELETE 事件

转载于:https://www.cnblogs.com/xiong63/p/6553692.html

yii2增删改查及AR的理解相关推荐

  1. mysql学习总结-初识+数据管理+增删改查+常用函数+事务理解+数据库设计+JDBC引入

    1.初识MySQL 1.1数据库的定义 数据库(DataBase,简称DB),是一个按数据结构来存储和管理数据的计算机软件系统.每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制 ...

  2. 欢迎来到Jsp编程课时十二——今天实现的目标是。@1将数据库的数据发送到浏览器。@2利用浏览器实现对数据库的增删改查操作。@3理解MVC三层架构的定义。

    完成项目会有以下的效果. JSP第二十课:Mvc+Mysql+Servlect+Jsp实现在浏览器上对数据库的增删改查. MVC全名是Model View Controller, 是 @@1模型(mo ...

  3. 原生YII2 增删改查的一些操作(非ActiveRecord)

    1.添加数据 如下,使用insert方法:t_admin_user为数据表名..其他的是属性.. $num = Yii::$app->db->createCommand()->ins ...

  4. 数据增删改查之三层架构(理解三层续)

    首先是画的图,感觉把图画完了,工程就完成了一大半,前提是画的思路是对的.还是在理解三层. 下面是画的关于数据的增删改查这个小例子的包图.类图和时序图. 包图. 类图. 时序图. 用户注册. 用户删除. ...

  5. Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法)

    Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法) 目录 自定义创建数据库的各种表demo集合 具体案例 1.学生信息数据表案例

  6. java web期末课程设计 学生成绩管理系统(mysql,jstl+el,Javabean)+增删改查,session域+servlet(基础易理解)

    学生成绩管理系统 一.实验目的 为了更好的学习理解JavaWeb,创建了此系统.此系统可以帮助学习Java web基础,特别是javaweb入门,此系统使用大部分Java web基础知识.Java w ...

  7. resultset mysql_MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ [正文] 一.ResultSet接口的介绍: 对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查 ...

  8. 带头节点单链表的增删改查

    单链表有很多结构循环单链表,有头节点的单链表,无头节点的单链表,双节点单链表,以下源码是以有一个头节点的单链表为例写的增删改查的各种功能,就是下图 然后各个注释也在函数后面写着,这玩意确实还挺难,源码 ...

  9. Spring Boot 中使用 MongoDB 增删改查

    本文快速入门,MongoDB 结合SpringBoot starter-data-mongodb 进行增删改查 1.什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件 ...

最新文章

  1. linux批量创建用户和密码
  2. 基于.Net Core开发现代化Web应用程序系列课程和文章
  3. 接口测试01 - HTTP协议报文结构及示例
  4. 小程序 video 控制器外观调整_「小程序JAVA实战」小程序视频组件与api介绍(51)...
  5. 如何毕业后继续白嫖知网
  6. 大唐波斯将军 机器人_你的工作会被机器人取代吗? 作者:大唐波斯将军2015-04-08 09:34...
  7. python爬虫-初步使用Scrapy分布式爬虫(爬取mcbbs整合包保存名称及主要mod),大爱MC
  8. 改变Android的hello world程序字体颜色和背景颜色
  9. python消息队列框架持久化_消息队列如果持久化到数据库的话,相对于直接操作数据库有啥优势?...
  10. 神奇的applycall
  11. Java 工厂模式学习
  12. linux java xmx_linux应用实际内存大于 jvm xmx
  13. python请求库_如何使用Python请求库发出post请求?
  14. 【信息系统项目管理师】第12章-项目采购管理 知识点详细整理
  15. 如何用纯 CSS 创作一个 3D 文字跑马灯特效
  16. 在头文件中定义或声明变量
  17. 中国数控机床行业市场竞争态势及投资战略规划报告2022-2028年版
  18. php的get和post,PHP中GET和POST区别
  19. 在HTML中什么表示水平线,HTML中加入水平线的标签是( )
  20. SharePoint 读取选项字段所有Choise

热门文章

  1. 冒泡排序 快速排序 插入排序 选择排序
  2. JavaScript GetAbsoultURl
  3. list.action.php,doAction.php里代码可以这样写,大大减少了重复的代码
  4. ITK读取RGB图像像素值
  5. 如何使用War包部署Tomcat
  6. 用虚拟机安装了红帽后,我确实没设置用户名密码,但现在一打开就让输入用户名密码。这种情况该怎么办??
  7. mysql datetime 间隔,MySQL datetime默认时间间隔
  8. Matlab线性规划(Linear Programming)
  9. 话筒好坏测试软件,如何简单地判断麦克风的质量好坏?
  10. 【Java从入门到天黑|06】高质量男性SpringBoot入门及原理(基础总结版,强烈建议收藏)