首页
技术小册
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框架从入门到精通(上)
### 6.3.2 ActiveQuery成员方法简介 在Yii2框架中,`ActiveQuery`是处理数据库查询的强大工具,它继承自`yii\db\Query`,并添加了对Active Record模型的额外支持。通过`ActiveQuery`,开发者可以构建复杂的查询逻辑,包括条件筛选、排序、分页等,而无需编写复杂的SQL语句。本章节将详细介绍`ActiveQuery`类中的一些核心成员方法,帮助读者从基础到精通地掌握这一强大功能。 #### 6.3.2.1 `where()`:条件筛选 `where()`方法是`ActiveQuery`中最常用的方法之一,用于设置查询条件。它接受多种参数格式,使得构建复杂的查询条件变得灵活而强大。 - **基本用法**:传递一个字符串作为SQL条件语句,同时可以通过第二个参数(可选)传递绑定参数,以防止SQL注入。 ```php $query = User::find()->where('status = :status', [':status' => 1]); ``` - **使用数组**:以数组形式传递条件,其中每个元素代表一个条件,数组可以是一维的(AND连接)或二维的(自定义连接逻辑)。 ```php // AND连接 $query = User::find()->where([ 'status' => 1, 'type' => 'admin', ]); // 使用操作符 $query = User::find()->where([ 'and', ['>', 'age', 18], ['<', 'age', 60], ]); // 自定义逻辑(OR) $query = User::find()->where([ 'or', ['status' => 1], ['type' => 'guest'], ]); ``` - **表达式对象**:还可以使用`yii\db\Expression`对象来表示复杂的表达式。 #### 6.3.2.2 `andWhere()` 与 `orWhere()` 这两个方法用于在现有查询条件上添加额外的AND或OR条件,而不会覆盖之前设置的条件。 - **示例**: ```php $query = User::find()->where(['status' => 1])->andWhere(['>', 'age', 18]); // 相当于 WHERE status = 1 AND age > 18 $query = User::find()->where(['status' => 1])->orWhere(['type' => 'guest']); // 相当于 WHERE status = 1 OR type = 'guest' ``` #### 6.3.2.3 `orderBy()`:排序 `orderBy()`方法用于指定查询结果的排序规则。可以指定一个或多个字段,以及每个字段的排序方向(ASC升序或DESC降序)。 - **基本用法**: ```php $query = User::find()->orderBy('id ASC, name DESC'); // 或者使用数组形式 $query = User::find()->orderBy(['id' => SORT_ASC, 'name' => SORT_DESC]); ``` #### 6.3.2.4 `limit()` 与 `offset()`:分页 `limit()`和`offset()`方法用于实现分页功能,`limit()`设置返回的记录数,`offset()`设置跳过的记录数。 - **示例**: ```php $query = User::find()->limit(10)->offset(20); // 跳过前20条记录,返回接下来的10条记录 ``` #### 6.3.2.5 `join()`:连接查询 `join()`方法用于执行SQL JOIN操作,可以连接一个或多个表。它支持INNER JOIN、LEFT JOIN等多种JOIN类型。 - **示例**: ```php $query = User::find()->joinWith('profiles', true, 'LEFT JOIN'); // 或者更详细的JOIN $query = User::find()->join('INNER JOIN', 'profile', 'user.id = profile.user_id'); ``` #### 6.3.2.6 `groupBy()`:分组 `groupBy()`方法用于指定SQL查询中的GROUP BY子句,常用于聚合查询。 - **示例**: ```php $query = Order::find()->select('status, COUNT(*) as count')->groupBy('status'); ``` #### 6.3.2.7 `having()`:分组后筛选 `having()`方法用于在GROUP BY分组后对结果进行筛选,与`where()`不同的是,它作用于聚合函数的结果上。 - **示例**: ```php $query = Order::find()->select('status, COUNT(*) as count') ->groupBy('status') ->having('count > 10'); ``` #### 6.3.2.8 `select()`:选择字段 `select()`方法用于指定查询需要返回的字段。默认情况下,会返回模型的所有字段。 - **示例**: ```php $query = User::find()->select(['id', 'username']); ``` #### 6.3.2.9 `indexBy()`:结果集索引 `indexBy()`方法允许你指定一个字段,该字段的值将作为结果数组中元素的键。 - **示例**: ```php $users = User::find()->indexBy('id')->all(); // 结果将是一个数组,其键为用户的ID ``` #### 6.3.2.10 `asArray()`:以数组形式返回结果 默认情况下,`ActiveQuery`返回的是Active Record对象的数组。使用`asArray()`方法可以使查询结果直接以关联数组的形式返回,提高性能。 - **示例**: ```php $users = User::find()->asArray()->all(); // $users中的每个元素都是一个数组,而不是User对象 ``` #### 6.3.2.11 `count()`、`sum()`、`avg()` 等聚合函数 `ActiveQuery`还提供了多种聚合函数方法,如`count()`、`sum()`、`avg()`等,用于执行聚合查询。 - **示例**: ```php $total = User::find()->count(); // 返回用户总数 $totalAge = User::find()->select('SUM(age)')->scalar(); // 返回用户年龄总和 ``` ### 总结 `ActiveQuery`是Yii2框架中处理数据库查询的强大工具,通过其丰富的成员方法,开发者可以灵活地构建各种复杂的查询逻辑。从基本的条件筛选、排序、分页,到高级的连接查询、分组筛选、聚合函数等,`ActiveQuery`都提供了简洁而强大的支持。掌握这些成员方法,将有助于你更高效、更安全地处理数据库操作,从而编写出更优秀的Yii2应用程序。
上一篇:
6.3.1 ActiveQuery成员属性简介
下一篇:
6.3.3 Query类where()成员方法简介
该分类下的相关小册推荐:
Laravel(10.x)从入门到精通(十七)
PHP8入门与项目实战(3)
PHP程序员面试算法宝典
PHP面试指南
PHP合辑5-SPL标准库
Magento零基础到架构师(目录管理)
PHP程序员面试笔试真题与解析
Laravel(10.x)从入门到精通(七)
PHP8入门与项目实战(7)
Magento2主题开发高级实战
Laravel(10.x)从入门到精通(十八)
剑指PHP(从入门到进阶)