首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 PHP语言发展历史及其适合的应用领域
1.2 什么是框架
1.3 为什么要用框架开发
1.4 自定义框架
1.4.1 MVC框架模式的实现
1.4.2 入口文件
1.4.3 应用(前端控制器)
1.4.4 从自定义框架到Yii2框架
2.1 Yii简介
2.1.1 什么是Yii框架技术
2.1.2 Yii2的优点
2.1.3 应用案例
2.2 下载Yii2
2.3 运行应用
2.4 输出“Hello World”
2.5 入口文件
2.6 应用主体
2.7 MVC框架模式
2.8 Yii2框架中的控制器
2.9 Yii2框架中的视图
2.10 项目实现迭代一:渲染首页、列表页和内容页视图
3.1 布局概述
3.2 项目实现迭代二:创建并使用布局渲染首页视图
3.3 Controller类的render()方法执行流程
3.4 应用级布局
3.5 嵌套布局
3.6 项目实现迭代三:使用嵌套布局渲染“新闻中心”列表页
3.7 视图文件的存储路径
4.1 模块概述
4.2 使用Gii创建模块
4.3 模块中的资源文件
4.4 项目实现迭代四:文章管理
5.1 ActiveRecord模型概述
5.2 通过CRUD(增查改删)操作理解ActiveRecord类
5.2.1 文章表(ds_article)
5.2.2 在配置文件中初始化数据库连接
5.2.3 创建ActiveRecord模型
5.2.4 通过查询操作理解ActiveRecord类
5.2.5 通过插入和更新操作理解ActiveRecord类
5.2.6 通过删除操作理解ActiveRecord类
5.3 项目实现迭代五:首页“行业百科”数据查询
5.4 项目实现迭代六:在“文章添加”页面实现数据插入
6.1 ActiveRecord模型类的find()方法与查询执行流程
6.2 查询方法find()实例
6.2.1 实现带有逻辑运算符和比较运算符的查询
6.2.2 实现范围比较查询
6.2.3 实现模糊查询
6.3 查询构建类ActiveQuery
6.3.1 ActiveQuery成员属性简介
6.3.2 ActiveQuery成员方法简介
6.3.3 Query类where()成员方法简介
6.4 关联查询
6.5 项目实现迭代七:完成首页中的数据填充
6.5.1 实现幻灯片切换
6.5.2 实现成功案例
6.5.3 实现其他栏目的文章内容查询
当前位置:
首页>>
技术小册>>
Yii2框架从入门到精通(上)
小册名称:Yii2框架从入门到精通(上)
### 5.2.5 通过插入和更新操作理解ActiveRecord类 在Yii2框架中,ActiveRecord(活动记录)是一种用于访问数据库中数据的高级抽象层,它基于MVC(Model-View-Controller)架构中的Model部分。通过ActiveRecord,开发者可以以一种面向对象的方式来操作数据库中的数据,而无需编写复杂的SQL语句。在本章节,我们将深入探讨如何通过插入和更新操作来理解和运用Yii2的ActiveRecord类。 #### 5.2.5.1 ActiveRecord基础 首先,简要回顾一下ActiveRecord的基本概念。ActiveRecord是一种数据访问对象(DAO)模式,它将数据库中的表映射为PHP类,表中的每一行数据对应类的一个实例(对象)。这种映射关系使得开发者可以通过操作对象来间接操作数据库中的数据,极大地简化了数据库操作的复杂性。 在Yii2中,要创建一个ActiveRecord类,通常需要继承`\yii\db\ActiveRecord`类,并在子类中定义一些公共静态属性来指定数据库表的相关信息,如表名、主键等。 ```php namespace app\models; use yii\db\ActiveRecord; class User extends ActiveRecord { /** * @return string 返回当前ActiveRecord类对应的数据库表名 */ public static function tableName() { return '{{%user}}'; // 使用双大括号包围表名,支持表前缀 } // 可以定义其他属性和方法 } ``` #### 5.2.5.2 插入操作 在Yii2中,使用ActiveRecord进行插入操作相对简单直接。首先,你需要创建一个ActiveRecord类的实例,然后设置其属性为你想要插入数据库的值,最后调用`save()`方法完成插入。 ```php $user = new User(); $user->username = 'exampleUser'; $user->email = 'example@example.com'; $user->status = 1; // 假设1代表激活状态 if ($user->save()) { // 插入成功 echo "用户插入成功!"; } else { // 插入失败,获取错误信息 print_r($user->getErrors()); } ``` 在上面的代码中,我们创建了一个`User`类的实例,并设置了它的几个属性(username, email, status)。随后,调用`save()`方法尝试将数据保存到数据库。如果插入成功,`save()`方法返回`true`;否则,返回`false`,并可以通过`getErrors()`方法获取错误信息。 #### 5.2.5.3 更新操作 更新操作与插入操作类似,但首先你需要有一个已经存在的数据库记录。这通常意味着你需要先通过某种方式(如查询)获取到该记录的ActiveRecord实例,然后修改其属性,最后调用`save()`方法完成更新。 ```php // 假设我们要更新ID为1的用户 $user = User::findOne(1); if ($user !== null) { $user->username = 'newExampleUser'; $user->email = 'newexample@example.com'; if ($user->save()) { // 更新成功 echo "用户信息更新成功!"; } else { // 更新失败,获取错误信息 print_r($user->getErrors()); } } else { // 没有找到对应的用户 echo "用户不存在!"; } ``` 在这个例子中,我们使用了`findOne()`方法来根据主键ID查询用户。如果找到了对应的用户,就修改其属性并尝试保存。注意,`save()`方法在这里会根据实例的当前状态(即已修改的属性)自动决定是执行插入还是更新操作。由于`$user`是一个已存在的数据库记录的实例,所以这里执行的是更新操作。 #### 5.2.5.4 深入理解ActiveRecord的工作原理 ActiveRecord之所以能够如此方便地进行数据库操作,背后离不开Yii2框架对其内部机制的精心设计和实现。以下几点是理解ActiveRecord工作原理的关键: 1. **属性映射**:ActiveRecord类通过PHP的魔术方法(如`__get()`和`__set()`)实现了对数据库表字段的透明访问。当你访问一个实例的属性时,ActiveRecord会在内部将其转换为对数据库表中相应字段的访问。 2. **脏检查**:在调用`save()`方法时,ActiveRecord会进行所谓的“脏检查”,即比较当前实例的属性值与数据库中的值是否一致。只有那些被修改过的属性(即“脏”属性)才会被包含在生成的SQL语句中,用于更新数据库。 3. **场景(Scenarios)**:Yii2的ActiveRecord支持场景的概念,允许你在不同的操作(如插入、更新)中定义不同的验证规则。虽然这在本节没有直接讨论,但它是ActiveRecord功能的一个重要补充。 4. **事务支持**:ActiveRecord支持数据库事务,这意味着你可以将多个数据库操作组合成一个原子操作,要么全部成功,要么全部失败回滚。这对于保持数据的一致性和完整性至关重要。 5. **性能优化**:Yii2的ActiveRecord在实现上进行了诸多优化,以减少对数据库的访问次数和提高查询效率。例如,它支持延迟加载(Lazy Loading)和预加载(Eager Loading)等策略,以优化关联数据的加载性能。 #### 5.2.5.5 小结 通过本节的学习,我们深入了解了Yii2框架中ActiveRecord类的插入和更新操作。我们学习了如何创建ActiveRecord实例、设置其属性、以及使用`save()`方法进行数据保存。同时,我们也对ActiveRecord的工作原理有了一定的认识,包括属性映射、脏检查、场景、事务支持以及性能优化等方面。这些知识将为我们后续在Yii2框架中高效地进行数据库操作打下坚实的基础。
上一篇:
5.2.4 通过查询操作理解ActiveRecord类
下一篇:
5.2.6 通过删除操作理解ActiveRecord类
该分类下的相关小册推荐:
Workerman高性能Web框架-Webman
Laravel(10.x)从入门到精通(十四)
Magento零基础到架构师(库存管理)
PHP安全之道
PHP面试指南
Laravel(10.x)从入门到精通(十八)
全面构建Magento2电商系统
Laravel(10.x)从入门到精通(十九)
Yii2框架从入门到精通(下)
Magento零基础到架构师(内容设计)
Laravel(10.x)从入门到精通(十二)
Laravel(10.x)从入门到精通(十)