当前位置: 首页 > news >正文

【Yii2】数据库查询方法总结

目录

1.查找单个记录:

2.查找多个记录:

3.条件查询:

4.关联查询: 假设User模型有一个名为orders的多对一关联关系。

5.排序和分组:

6.数据操作:

7.事务处理:

8.命令查询:

9.count查询

 10.使用ActiveQuery类提供的各种方法来构建复杂的查询


Yii2是一个功能丰富的PHP框架,提供了大量的数据库查询方法和功能,以便开发人员能够方便地对数据库进行操作。以下是Yii2中一些常用的数据库查询方法的总结:

这些示例假设你已经有了一个名为User的模型,它代表了数据库中的user表,并且该表有id、username、email和status字段。

1.查找单个记录:


// 查找ID为1的用户
$user = User::findOne(1);

2.查找多个记录:


// 查找所有状态为'active'的用户
$users = User::findAll(['status' => 'active']);

3.条件查询:


// 查找状态为'active'的用户
$users = User::find()->where(['status' => 'active'])->all();

4.关联查询: 假设User模型有一个名为orders的多对一关联关系。


// 获取用户及其订单信息
$users = User::find()->with('orders')->all();

5.排序和分组:


// 按照用户名升序排序
$users = User::find()->orderBy('username ASC')->all();// 按照状态分组
$users = User::find()->groupBy('status')->all();

6.数据操作:


// 插入新用户
$newUser = new User();
$newUser->username = 'newuser';
$newUser->email = 'newuser@example.com';
$newUser->status = 'active';
$newUser->save(); // 或者 $newUser->insert();// 更新用户
$user = User::findOne(1);
$user->username = 'updateduser';
$user->save(); // 或者 $user->update();// 删除用户
$user = User::findOne(1);
$user->delete();

7.事务处理:


// 开始事务
$transaction = Yii::$app->db->beginTransaction();try {// 执行一系列数据库操作...$user->save();// 其他操作...// 提交事务$transaction->commit();
} catch (\Exception $e) {// 回滚事务$transaction->rollBack();// 处理异常...
}

8.命令查询:


// 执行原生SQL命令
$command = Yii::$app->db->createCommand('SELECT * FROM user WHERE status = :status', [':status' => 'active']);
$users = $command->queryAll();

9.count、sum查询


// count
// 假设有一个名为Post的模型类,代表博客文章
// Post是ActiveRecord的一个实例
$query = Post::find(); // 创建一个查询实例// 统计所有文章的数量
$count = $query->count(); // 返回文章的总数// 你也可以将统计结果作为数组的一部分返回
$ posts = Post::find()->count();// 如果要统计带有特定条件的文章数量
$count = Post::find()->where(['status' => 'published'])->count(); // 只统计发布状态的文章// 你也可以链式调用其他查询方法
$count = Post::find()->where(['status' => 'published'])->limit(10)->count(); // 统计最近10篇发布状态的文章的数量// sum
// 以下是一个示例,展示了如何使用 yii\db\Query 类执行 sum 查询:
use yii\db\Query;// 创建一个 Query 对象
$query = new Query();// 选择要查询的表
$query->from('your_table_name');// 使用 sum() 函数计算某个字段的总和
$sum = $query->sum('your_field_name');// 执行查询并获取结果
$result = $query->one();//还可以使用 select() 方法来指定要查询的字段,例如:
use yii\db\Query;$query = new Query();// 选择要查询的表
$query->from('your_table_name');// 使用 sum() 函数计算某个字段的总和
$query->select(['sum(your_field_name)']);// 执行查询并获取结果
$result = $query->scalar();

 10.使用ActiveQuery类提供的各种方法来构建复杂的查询



// 使用比较操作符
$query = Post::find()->where(['status' => 'published'])->andWhere(['created_at' => '<', new \DateTime()]); // 查找发布状态的文章,且创建时间早于当前时间的文章// 使用范围查询
$query = Post::find()->where(['status' => 'published'])->andWhere(['created_at' => BETWEEN, [new \DateTime('2023-01-01'), new \DateTime('2023-12-31')]]); // 查找发布状态的文章,且创建时间在2023年1月1日至2023年12月31日之间的文章// 你也可以直接使用范围查询的简写形式
$query = Post::find()->where(['status' => 'published'])->andWhere(['created_at' => 'BETWEEN', [new \DateTime('2023-01-01'), new \DateTime('2023-12-31')]]); // 同上,使用BETWEEN进行范围查询// 你可以使用链式调用来组合多个条件
$query = Post::find()->where(['status' => 'published'])->andWhere(['created_at' => '<', new \DateTime()])->orWhere(['created_at' => BETWEEN, [new \DateTime('2023-01-01'), new \DateTime('2023-12-31')]]); // 查找发布状态的文章,且创建时间早于当前时间,或者创建时间在2023年1月1日至2023年12月31日之间的文章// 你还可以使用`notBetween`来查询不在指定范围内的数据
$query = Post::find()->where(['status' => 'published'])->andWhere(['created_at' => 'NOT BETWEEN', [new \DateTime('2023-01-01'), new \DateTime('2023-12-31')]]); // 查找发布状态的文章,且创建时间不在2023年1月1日至2023年12月31日之间的文章Post::find()->where(['in', 'uid', $arr])->andWhere(['not in', 'order_status', [-1, 2]])->groupBy('uid')->count();Post::find()->where(['type' => '1'])->andWhere(['between', 'updated_at', $curMonth, $nexMonth])->sum('price');Post::find()->select('id, nickname, mobile, money, status, created_at')->where(['uid' => $this->uid])->andWhere(['>', 'created_at', $data['startTime']-(3600*24*2)])->andWhere(['<=', 'created_at', $data['startTime']-(3600*24)])->orderBy('created_at desc')->asArray()->one();

请注意,这些示例中的User模型应当是一个已经定义好的模型类,它继承了yii\db\ActiveRecord。在实际应用中,你可能需要根据具体的表结构和业务逻辑来调整这些示例代码。此外,Yii2的数据库操作通常会结合其 ActiveForm 和 GridView 等组件来提高开发效率。

http://www.lryc.cn/news/270213.html

相关文章:

  • 区块链的三难困境是什么,如何解决?
  • oCPC实践录 | oCPM的秘密
  • 【Linux Shell学习笔记】Linux Shell的位置参数与函数
  • 缓存cache和缓冲buffer的区别
  • Vue常见面试问答
  • Eureka相关面试题及答案
  • 想要学会JVM调优,先掌握JVM内存模型和JVM运行原理
  • 详解C语言入门程序:HelloWorld.c
  • 【elk-day01】es和kibana搭建及验证---Mac-Docker
  • 探索 3D 图形处理的奥秘
  • R语言孟德尔随机化研究工具包(1)---friendly2MR
  • CentOS7下使用Docker安装Nacos
  • 用 Node.js 写一个爬虫
  • 关于HTTPS
  • 安全配置审计概念、应用场景、常用基线及扫描工具
  • 【计算机毕业设计】python+django数码电子论坛系统设计与实现
  • 最优化方法Python计算:无约束优化应用——神经网络回归模型
  • Spring Data Redis对象缓存序列化问题
  • 自动驾驶代客泊车AVP巡航规划详细设计
  • 亚马逊云科技 re:Invent 2023 产品体验:亚马逊云科技产品应用实践 国赛选手带你看 Elasticache Serverless
  • Flink on K8S集群搭建及StreamPark平台安装
  • SpringBoot如何优雅的处理免登录接口
  • 元旦档首日票房超4.69亿,“下雪场尴尬”上热搜!
  • CentOS系统中设置IP地址的方式和存在的问题
  • 使用vmware,在ubuntu18.04中使用笔记本的摄像头
  • 中间件系列 - Redis入门到实战(高级篇-分布式缓存)
  • 使用Visual Studio调试VisionPro脚本
  • Ubuntu安装K8S的dashboard(管理页面)
  • zookeeper之集群搭建
  • 从0开始界面设计师 Qt Designer