【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 等组件来提高开发效率。
相关文章:
【Yii2】数据库查询方法总结
目录 1.查找单个记录: 2.查找多个记录: 3.条件查询: 4.关联查询: 假设User模型有一个名为orders的多对一关联关系。 5.排序和分组: 6.数据操作: 7.事务处理: 8.命令查询: 9…...

区块链的三难困境是什么,如何解决?
人们需要保持社交、工作和睡眠之间的平衡,并且努力和谐相处。同样的概念也反映在区块链的三难困境中。 区块链三难困境是一个术语,指的是现有区块链的局限性:可扩展性、安全性和去中心化。这是一个存在了几十年的设计问题,其问题的…...

oCPC实践录 | oCPM的秘密
前言 笔者从这几方面介绍oCPM,并一一分析平台侧宣称的oCPM相比oCPC的优势,并解开其中的秘密。 1)什么是oCPM? 2)oCPC与oCPM的异同 3)平台宣称oCPM的优势 4)oCPM真正的秘密 5)oCPM下的点击率与…...

【Linux Shell学习笔记】Linux Shell的位置参数与函数
一、位置参数 位置参数,也被称之为位置变量,通过位置参数,可以在执行程序的时候,向程序传递数据 1.1 shell接收参数的方法 1.2 向shell传递参数的方法 二、函数 2.1 函数基础 2.1.1 函数简介 函数本质上就是一个代码块…...

缓存cache和缓冲buffer的区别
近期被这两个词汇困扰了,感觉有本质的区别,搜了一些资料,整理如下 计算机内部的几个部分图如下 缓存(cache) https://baike.baidu.com/item/%E7%BC%93%E5%AD%98 提到缓存(cache),就…...

Vue常见面试问答
vue响应式数据 vue2 Vue2 的对象数据是通过 Object.defineProperty 对每个属性进行监听,当对属性进行读取的时候,就会触发 getter,对属性进行设置的时候,就会触发 setter。 /** * 这里的函数 defineReactive 用来对 Object.def…...
Eureka相关面试题及答案
1、什么是Eureka? Eureka是一个由Netflix开发的服务发现(Service Discovery)工具,它是Spring Cloud生态系统中的一个关键组件。服务发现是微服务架构中的一个重要概念,它允许服务实例在启动时注册自己,以便…...

想要学会JVM调优,先掌握JVM内存模型和JVM运行原理
1、前言 今天将和你一起探讨Java虚拟机(JVM)的性能调优。 JVM算是面试中的高频问题了,通常情况下总会有人问到:请你讲解下 JVM 的内存模型,JVM 的 性能调优做过? 2、为什么 JVM 在 Java 中如此重要 首…...
详解C语言入门程序:HelloWorld.c
#include <stdio.h> // 头文件,使用<>编译系统会在系统头文件目录搜索在C语言中,#include 是预处理指令,用于将指定的头文件内容插入到当前源文件中。这里的 <stdio.h> 是一个标准库头文件,其中包含了与输入输出…...

【elk-day01】es和kibana搭建及验证---Mac-Docker
Mac系统使用Docker下载搭建和验证eskibana Docker下载安装es安装es验证kibana安装kibana验证 Docker下载安装 Docker Desktop官网安装下载地址 说明一下为什么要安装desktop版本的docker,因为docker作为工具使用,我们需要的是开箱即用,没有必…...

探索 3D 图形处理的奥秘
最近一年多来,在 3Dfx、Intel 们的狂轰滥炸中,在 Quake、古墓丽影们的推波助澜下,三维图形已经成为计算机迷眼中的又一个热点。3D 世界到底是怎样的神奇,我们又是怎样享受它的乐趣呢?就让我们来一探究竟吧。 图形基础…...
R语言孟德尔随机化研究工具包(1)---friendly2MR
friendly2MR是孟德尔岁随机化研究中的一个重要补充工具,可以批量探索因素间的因果关系,以及快速填补缺失eaf的数据,但是存在细微差异需要注意。 remotes::install_github("xiechengyong123/friendly2MR") library(friendly2MR)lib…...
CentOS7下使用Docker安装Nacos
CentOS7下使用Docker安装Nacos 一、查看和nacos相关的镜像二、拉去镜像三、创建容器四、查看日志 一、查看和nacos相关的镜像 docker search nacos二、拉去镜像 拉取 nacos/nacos-server:1.2.0 镜像 docker pull nacos/nacos-server:1.2.0三、创建容器 docker run --env MO…...

用 Node.js 写一个爬虫
自己设计一个网站,然后去爬取别人家页面的数据来做一个自己的网站。哈哈哈,如果自己写着玩可能没啥事,但如果用这个网站来获利,你可能就要被寄律师函了,毕竟这有点‘刑’。这篇文章呢,就带大家爬取豆瓣TOP2…...

关于HTTPS
目录 什么是加密 对称加密 非对称加密 中间人攻击 引入证书 HTTPS是一个应用层的协议,是在HTTP协议的基础上引入了一个加密层. HTTP协议内容都是按照文本的方式明文传输,这就导致在传输的过程中出现一些被篡改的情况. 运营商劫持事件 未被劫持的效果,点击下载按钮,就会…...

安全配置审计概念、应用场景、常用基线及扫描工具
软件安装完成后都会有默认的配置,但默认配置仅保证了服务正常运行,却很少考虑到安全防护问题,攻击者往往利用这些默认配置产生的脆弱点发起攻击。虽然安全人员已经意识到正确配置软件的重要性,但面对复杂的业务系统和网络结构、网…...

【计算机毕业设计】python+django数码电子论坛系统设计与实现
本系统主要包括管理员和用户两个角色组成;主要包括:首页、个人中心、用户管理、分类管理、数码板块管理、数码评价管理、数码论坛管理、畅聊板块管理、系统管理等功能的管理系统。 后端:pythondjango 前端:vue.jselementui 框架&a…...

最优化方法Python计算:无约束优化应用——神经网络回归模型
人类大脑有数百亿个相互连接的神经元(如下图(a)所示),这些神经元通过树突从其他神经元接收信息,在细胞体内综合、并变换信息,通过轴突上的突触向其他神经元传递信息。我们在博文《最优化方法Python计算:无约…...

Spring Data Redis对象缓存序列化问题
相信在项目中,你一定是经常使用 Redis ,那么,你是怎么使用的呢?在使用时,有没有遇到同我一样,对象缓存序列化问题的呢?那么,你又是如何解决的呢? Redis 使用示例 添加依…...
自动驾驶代客泊车AVP巡航规划详细设计
目 录 巡航规划详细设计... 1 修改记录... 2 目 录... 3 1 背景... 5 2 系统环境... 6 2.1 巡航规划与其它模块联系... 6 2.2 巡航规划接口说明... 6 3 规划模块设计... 9 3.1 巡航规划架构图... 9 3.2 预处理... 10 3.3 Planner. 10 3.3.1 Geometry planner. 10 …...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...