【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 …...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...