首页
技术小册
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.4 通过查询操作理解ActiveRecord类 在Yii2框架中,ActiveRecord是一个非常重要的概念,它实现了对象关系映射(ORM)的一部分,允许开发者以面向对象的方式操作数据库中的数据。通过ActiveRecord,数据库表被映射为PHP类,表中的行则对应类的实例,而列则转化为实例的属性。这种映射方式极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑的实现,而非繁琐的SQL语句编写。本章节将深入探讨如何通过查询操作来进一步理解Yii2中的ActiveRecord类。 #### 5.2.4.1 ActiveRecord基础回顾 在开始之前,我们先简要回顾一下ActiveRecord的基本概念。在Yii2中,每个ActiveRecord类通常对应数据库中的一个表,类名通常遵循`app\models\表名`的命名规则(其中`app\models`是模型类通常所在的命名空间,表名首字母大写)。例如,对于名为`user`的数据库表,其对应的ActiveRecord类可能命名为`app\models\User`。 ActiveRecord类继承自`\yii\db\ActiveRecord`,并至少包含一个名为`tableName`的静态方法,该方法返回数据库表的名称(不包含前缀)。此外,ActiveRecord类还通过`__get`和`__set`魔术方法实现了对数据库列的动态访问,使得可以直接通过对象属性来访问和修改数据库中的数据。 #### 5.2.4.2 基本查询操作 ##### 5.2.4.2.1 查找单个记录 通过`find()`方法,我们可以开始一个查询构建过程。`find()`方法返回一个`ActiveQuery`对象,该对象提供了丰富的链式调用方法来构建复杂的查询条件。要查找单个记录,可以使用`one()`或`findOne()`方法。`one()`方法用于执行查询并返回查询结果的第一条记录(作为ActiveRecord实例),如果没有找到记录则返回`null`。而`findOne()`方法则允许你通过主键值来快速查找记录。 ```php // 使用one()方法 $user = User::find()->where(['status' => 1])->one(); // 使用findOne()方法,假设主键是id $userById = User::findOne(1); ``` ##### 5.2.4.2.2 查找多个记录 要查找多个记录,可以使用`all()`方法。该方法执行查询并返回所有匹配记录的数组(每个元素都是一个ActiveRecord实例)。 ```php $users = User::find()->where(['status' => 1])->all(); ``` #### 5.2.4.3 高级查询技巧 ##### 5.2.4.3.1 排序与限制 `ActiveQuery`提供了`orderBy()`和`limit()`/`offset()`方法来分别实现排序和分页功能。 ```php // 按创建时间降序排列,并限制返回前10条记录 $users = User::find()->orderBy(['created_at' => SORT_DESC])->limit(10)->all(); // 分页查询,跳过前10条记录,再取10条 $users = User::find()->orderBy(['created_at' => SORT_DESC])->offset(10)->limit(10)->all(); ``` ##### 5.2.4.3.2 条件查询 除了基本的`where()`方法外,`ActiveQuery`还支持更复杂的条件构建,如`andWhere()`、`orWhere()`、`filterWhere()`等,这些方法允许你构建更灵活的查询条件。 ```php // 使用andWhere添加额外条件 $users = User::find()->where(['status' => 1])->andWhere(['or', ['email' => 'example@example.com'], ['username' => 'testuser']])->all(); // 使用filterWhere进行安全过滤(自动处理空值) $search = 'test'; $users = User::find()->filterWhere(['like', 'username', $search])->all(); ``` ##### 5.2.4.3.3 关联查询 Yii2的ActiveRecord还支持关联查询,允许你通过定义关系(如一对一、一对多、多对多)来方便地查询相关联的数据。 ```php // 假设User与Profile是一对一关系 public function getProfile() { return $this->hasOne(Profile::class, ['user_id' => 'id']); } // 查询用户及其关联的个人资料 $user = User::find()->with('profile')->where(['id' => 1])->one(); echo $user->profile->bio; // 访问关联的个人资料 ``` #### 5.2.4.4 自定义查询方法 为了保持代码的整洁和可重用性,你还可以在ActiveRecord类中定义自定义的查询方法。 ```php public static function findActiveUsers() { return self::find()->where(['status' => 1]); } // 使用自定义查询方法 $activeUsers = User::findActiveUsers()->all(); ``` #### 5.2.4.5 性能考虑 虽然ActiveRecord提供了极大的便利,但在处理大量数据时,不当的查询可能会导致性能问题。因此,了解并优化你的查询至关重要。以下是一些提高查询性能的建议: - **使用索引**:确保数据库表的关键列上有索引,特别是那些经常用于查询条件的列。 - **减少数据加载**:只加载你需要的数据列,避免使用`*`来选择所有列。 - **分页与限制**:对于大量数据的查询,使用分页和限制来减少单次查询返回的数据量。 - **优化查询条件**:尽量使用高效的查询条件,避免在`where`子句中使用复杂的函数或计算。 - **使用原生SQL**:在性能成为瓶颈时,考虑使用Yii2的`Db`组件直接编写和执行原生SQL查询。 #### 5.2.4.6 总结 通过本章节的学习,我们深入了解了Yii2框架中ActiveRecord类的查询操作。从基本的查找单个记录、多个记录,到高级查询技巧如排序、限制、条件查询、关联查询,再到自定义查询方法和性能优化建议,我们全面掌握了如何使用ActiveRecord来高效地操作数据库。ActiveRecord的灵活性和强大功能使得Yii2成为了一个非常受欢迎的PHP框架,尤其适合快速开发和构建复杂的应用程序。希望本章节的内容能够帮助你更好地理解和运用Yii2中的ActiveRecord类。
上一篇:
5.2.3 创建ActiveRecord模型
下一篇:
5.2.5 通过插入和更新操作理解ActiveRecord类
该分类下的相关小册推荐:
Laravel(10.x)从入门到精通(十六)
PHP8入门与项目实战(1)
全面掌握Magento2-从配置到优化
PHP8实战小册
PHP程序员面试算法宝典
Magento零基础到架构师(库存管理)
PHP高性能框架-Workerman
Laravel(10.x)从入门到精通(三)
PHP合辑3-数组函数
Swoole高性能框架-Hyperf
Workerman高性能框架-GatewayWorker
Laravel(10.x)从入门到精通(十四)