首页
技术小册
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.2.1 实现带有逻辑运算符和比较运算符的查询 在Yii2框架中,数据库操作是一个核心功能,它允许开发者以高效且安全的方式与数据库进行交互。在构建复杂查询时,逻辑运算符(如AND、OR、NOT)和比较运算符(如=、<>、>、<、>=、<=)的使用变得尤为重要。这些运算符的组合能够帮助我们精确地筛选数据,满足多样化的业务需求。本节将深入探讨如何在Yii2中通过ActiveQuery接口和DbQueryBuilder类来实现带有逻辑运算符和比较运算符的查询。 #### 一、理解ActiveQuery与DbQueryBuilder 在Yii2中,`ActiveQuery`是基于Active Record模式的查询构建器,它提供了面向对象的数据库查询接口。而`DbQueryBuilder`则是更底层的、基于数组配置的查询构建器,适用于那些不需要完整Active Record功能的场景。两者都支持逻辑运算符和比较运算符的使用,但使用方式略有不同。 #### 二、比较运算符的使用 比较运算符是数据库查询中最基础的部分,它们用于比较列值与目标值之间的关系。在Yii2中,比较运算符的使用非常直观,主要通过`where()`方法来实现。 **示例**: 假设我们有一个`User`表,包含`id`、`username`、`email`和`age`等字段,我们需要查询年龄大于30岁的用户。 ```php // 使用ActiveQuery $users = User::find()->where(['>', 'age', 30])->all(); // 使用DbQueryBuilder $query = Yii::$app->db->createCommand() ->select('*') ->from('user') ->where('age > :age') ->bindValue(':age', 30) ->queryAll(); ``` 在上述示例中,`['>', 'age', 30]`是一个条件数组,它告诉`where()`方法我们要查找`age`字段大于30的记录。而在DbQueryBuilder的示例中,我们使用了SQL原生的比较运算符`>`,并通过`bindValue()`方法绑定参数,以防止SQL注入攻击。 #### 三、逻辑运算符的使用 逻辑运算符用于组合多个条件,以构建更复杂的查询逻辑。Yii2的`where()`方法支持多种方式来使用逻辑运算符。 ##### 3.1 AND运算符 默认情况下,当在`where()`方法中传递多个条件时,它们之间会隐式地使用AND运算符连接。 **示例**: 查询年龄大于30且用户名以"admin"开头的用户。 ```php // 使用ActiveQuery $users = User::find()->where(['>', 'age', 30])->andWhere(['like', 'username', 'admin%'])->all(); // 使用DbQueryBuilder $query = Yii::$app->db->createCommand() ->select('*') ->from('user') ->where('age > :age AND username LIKE :username') ->bindValues([':age' => 30, ':username' => 'admin%']) ->queryAll(); ``` ##### 3.2 OR运算符 Yii2提供了`orWhere()`方法用于在查询中添加OR条件。 **示例**: 查询年龄大于30或用户名以"admin"开头的用户。 ```php // 使用ActiveQuery $users = User::find()->where(['>', 'age', 30])->orWhere(['like', 'username', 'admin%'])->all(); // 使用DbQueryBuilder(注意:直接在where中组合) $query = Yii::$app->db->createCommand() ->select('*') ->from('user') ->where('age > :age OR username LIKE :username') ->bindValues([':age' => 30, ':username' => 'admin%']) ->queryAll(); ``` ##### 3.3 NOT运算符 在Yii2中,`not()`方法可以结合`where()`使用来实现NOT逻辑。 **示例**: 查询年龄不大于30的用户。 ```php // 使用ActiveQuery $users = User::find()->where(['not', ['>', 'age', 30]])->all(); // 使用DbQueryBuilder $query = Yii::$app->db->createCommand() ->select('*') ->from('user') ->where('NOT (age > :age)') ->bindValue(':age', 30) ->queryAll(); ``` #### 四、高级逻辑组合 在实际应用中,查询条件可能非常复杂,需要嵌套使用逻辑运算符。Yii2允许通过数组和字符串格式灵活构建这些复杂查询。 **示例**: 查询年龄大于30,且(用户名以"admin"开头或邮箱包含"@example.com")的用户。 ```php // 使用ActiveQuery $users = User::find()->where([ 'and', ['>', 'age', 30], ['or', ['like', 'username', 'admin%'], ['like', 'email', '@example.com'] ] ])->all(); // 使用DbQueryBuilder(略复杂,但原理相同) $query = Yii::$app->db->createCommand() ->select('*') ->from('user') ->where('age > :age AND (username LIKE :username OR email LIKE :email)') ->bindValues([':age' => 30, ':username' => 'admin%', ':email' => '%@example.com']) ->queryAll(); ``` #### 五、总结 在Yii2中,通过灵活使用逻辑运算符和比较运算符,我们可以构建出几乎任何复杂的数据库查询。无论是通过ActiveQuery的高级接口还是DbQueryBuilder的底层能力,Yii2都提供了强大而灵活的工具集,以满足开发者在数据库操作方面的各种需求。掌握这些技能,将大大提升你在Yii2框架中开发应用的效率和灵活性。 希望本章节的内容能够帮助你更好地理解并掌握Yii2中的数据库查询技巧,为你的技术之旅增添一份助力。
上一篇:
6.2 查询方法find()实例
下一篇:
6.2.2 实现范围比较查询
该分类下的相关小册推荐:
HTTP权威指南
Laravel(10.x)从入门到精通(十九)
Magento中文全栈二次开发
PHP面试指南
PHP合辑4-字符串函数
PHP合辑3-数组函数
PHP合辑5-SPL标准库
PHP程序员的设计模式
PHP合辑2-高级进阶
Laravel(10.x)从入门到精通(十二)
PHP程序员面试算法宝典
Laravel(10.x)从入门到精通(十七)