thinkphp6数据库操作

news2024/11/25 0:50:29

文章目录

    • 数据库
        • 链接
    • 查询构造器
        • 查询
    • 添加
    • 修改
    • 删除
    • 链式操作
    • 链式操作
      • where
      • table
      • field
      • page
      • odrder
      • join
      • cache
    • 聚合查询
    • 分页查询

数据库

链接

在config下有个database.php文件,一般情况下我们配置这个文件即可

return [
    'default'    =>    'mysql',
    'connections'    =>    [
        'mysql'    =>    [
            // 数据库类型
            'type'        => 'mysql',
            // 服务器地址
            'hostname'    => '127.0.0.1',
            // 数据库名
            'database'    => 'xxx',
            // 数据库用户名
            'username'    => 'root',
            // 数据库密码
            'password'    => '123456',
            // 数据库连接端口
            'hostport'    => '',
            // 数据库连接参数
            'params'      => [],
            // 数据库编码默认采用utf8
            'charset'     => 'utf8',
            // 数据库表前缀
            'prefix'      => 'think_',
        ],
    ],
];

切换数据库一般用不到
有需要可以参考官方文档
地址: https://www.kancloud.cn/manual/thinkphp6_0/1037531

查询构造器

查询

查询单个数据

use think\facade\Db;
// table方法必须指定完整的数据表名
Db::table('think_user')->where('id', 1)->find();

find方法查询结果不存在,返回 null,否则返回结果数组

查询数据集

Db::table('think_user')->where('status', 1)->select();

select 方法查询结果是一个数据集对象,如果需要转换为数组在后面加上->toArray();

如果我们在配置文件中配置了表的前缀
那么我们可以用如下的写法来查询数据

Db::name('user')->where('id', 1)->find();
Db::name('user')->where('status', 1)->select();

查询某个字段的值

Db::table('think_user')->where('id', 1)->value('username');

存在返回值,不存在返回null

查询某列字段
返回数组

Db::table('think_user')->where('status',1)->column('name');

添加

添加一条数据

$data = ['username' => 'admin1', 'password' => md5('123456789')];
Db::name('user')->save($data);

$data = ['username' => 'admin1', 'password' => md5('123456789')];
Db::name('user')->insert($data);

insert 方法添加数据成功返回添加成功的条数,通常情况返回 1

添加多条数据
insertAll,返回受影响的行数

$data = [
            ['username'=>'admin2','password'=>md5('123456')],
            ['username'=>'admin3','password'=>md5('1234567')],
            ['username'=>'admin4','password'=>md5('12345678')],
        ];
Db::name('user')->insertAll($data);

修改

用save方法更新
返回受影响的行数

Db::name('user')
    ->save(['id' => 1, 'username' => 'admin1']);

用update更行

Db::name('user')
    ->where('id', 1)
    ->update(['username' => 'admin1']);

删除

根据主键删除数据

// 根据主键删除
Db::name('user')->delete(1);
Db::name('user')->delete([1,2,3]);

// 条件删除    
Db::name('user')->where('id',1)->delete();
Db::name('user')->where('id','<',10)->delete();

// 无条件删除所有数据
Db::name('user')->delete(true);

// 软删除数据 使用delete_time字段标记删除,推荐使用
Db::name('user')
	->where('id', 1)
	->useSoftDelete('delete_time',time())
    ->delete();

上面是基本的增删改查操作
where语句可以像以下这样写
等号还可以换成其他符号

Db::name('user')->where('id','=',1)->select();
Db::name('user')->where('id',1)->select();

链式操作

where一个查询语句中可以跟多个where

Db::table('think_user')
    ->where('id','>',1)
    ->where('username','admin4')
    ->select(); 

table
下面的sql语句中,field用于查询指定字段
查询user表中的name属性和role中的title属性
table可以指定多张表和字段对应,limit限制查询的条数

Db::field('user.name,role.title')
->table('tb_user user,tb_role role')
->limit(10)->select();

//也可以写成数组的形式,为了避免和mysql的关键字冲突
Db::field('user.name,role.title')
->table([
    'tb_user'=>'user',
    'tb_role'=>'role'
])
->limit(10)->select();

这是建表的语句,以及操作的数据表
在这里插入图片描述

这是User模型的主要代码
要使用这些代码还需引入对应的类

use think\facade\Db;
public function getAllUser(){
        return Db::name('user')->where('username','admin')->select();
    }
    
    public function getAllPassword(){
        return Db::name('user')->where('username','admin')->column('password');
    }

    public function insertUser(){
        $data = ['username' => 'admin1', 'password' => md5('123456789')];
        return Db::name('user')->save($data);
    }

    public function insertAll(){
        $data = [
            ['username'=>'admin2','password'=>md5('123456')],
            ['username'=>'admin3','password'=>md5('1234567')],
            ['username'=>'admin4','password'=>md5('12345678')],
        ];
        return Db::name('user')->insertAll($data);
    }

    public function updateUser(){
        return Db::name('user')->save(['id'=>1,'username'=>'admin1']);
    }

    public function deleteUser(){
        return Db::name('user')->delete(1);
    }

这是控制器的主要代码
要使用User模型的方法还需要初始化User

	//先声明属性
	protected $User;
	//构造器实例化User类
    public function __construct(){
        $this->User = new User();
    }
    public function getAllUser(){
        // $User = new User();
        $res = $this->User->getAllUser();
        return json($res);
    }
    public function getAllPassword(){
        $res = $this->User->getAllPassword();
        return json($res);
    }

    public function insertUser(){
        $res = $this->User->insertUser();
        return json($res);
    }

    public function insertAll(){
        $res = $this->User->insertAll();
        return json($res);
    }

    public function updateUser(){
        $res = $this->User->updateUser();
        return json($res);
    }

    public function deleteUser(){
        $res = $this->User->deleteUser();
        return json($res);
    }

链式操作

where

一个sql语句中支持多个where条件

Db::table('think_user')
    ->where('id','>',1)
    ->where('username','admin')
    ->select(); 

table

一般模型能够自动识别当前对应的数据表,所以,使用table方法的情况通常是为了:

  1. 切换操作的数据表;
  2. 对多表进行操作

对多表进行操作,用field指定查询字段
table指定表,下面的列子中给tb_user设置了user别名
给tb_role设置了别名role
limit限制条数
下面的例子中就是查询tb_user 表中的names

Db::field('user.name,role.title')
->table('tb_user user,tb_role role')
->limit(10)->select();

field

用于查询指定字段

Db::table('user')->field('id,username')->select();

page

page方法主要用于分页查询
用limit实现分页查询

// 查询第一页数据
Db::table('article')->limit(0,10)->select(); 
// 查询第二页数据
Db::table('article')->limit(10,10)->select(); 

用page实现分页查询

// 查询第一页数据
Db::table('article')->page(1,10)->select(); 
// 查询第二页数据
Db::table('article')->page(2,10)->select(); 

odrder

order用于给查询结果进行排序,有desc和asc,默认asc

Db::table('user')
->where('status', 1)
->order('id', 'desc')
->limit(5)
->select();

join

JOIN方法用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

Db::table('tb_user')
->alias('a')			//为tb_user设置表的别名为a
->join('tb_role r','a.id = r.r_id')			//设置tb_role表的别名为r
->select();

cache

cache方法用于查询缓存操作
第一次查询结果会被缓存,第二次查询相同的数据的时候就会直接返回缓存中的内容,而不需要再次进行数据库查询操作。

Db::table('tb_user')->where('id',5)->cache(true)->find();

指定缓存的时间为60s

Db::table('user')->cache(true,60)->find();

设置缓存标识

Db::table('user')->cache('key',60)->find();

在外部就可以通过\think\Cache类直接获取查询缓存的数据,利用缓存标识

$data = \think\facade\Cache::get('key');

聚合查询

获取表中数据总量

Db::table('tb_user')->count();

根据字段统计数据

Db::table('think_user')->count('id');

分页查询

ThinkPHP内置了分页实现,要给数据添加分页输出功能变得非常简单,可以直接在Db类查询的时候调用paginate方法

// 查询状态为1的用户数据 并且每页显示10条数据
$list = Db::name('user')->where('status',1)->paginate(10);

下面这个例子中,list_rows是每页数量,current_page是当前页

$list = Db::name('user')->where('status',1)->paginate([
    'list_rows'=> 20,
    'current_page' => 'page',
]);

官方文档: https://www.kancloud.cn/manual/thinkphp6_0/1037571
那么就到此为止吧,再写就不礼貌了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/476886.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习记录:2023.4.27

2023.4.27 实习学习记录 Vue连接远程数据库Java基础 Vue cursor: pointer; 表示鼠标指针在该元素上时会变成手形&#xff0c;表示该元素可以被点击或者有交互性。这是一种CSS样式属性&#xff0c;常用于网页设计中。VueECharts实现热词图&#xff1a; 1、安装依赖&#xff1a;…

Linux命令集(Linux常用命令--cat指令篇)

Linux命令集&#xff08;Linux常用命令--cat指令篇&#xff09; Linux常用命令集&#xff08;cat指令篇&#xff09;4.cat(concatenate)1. 查看文件内容&#xff1a;2. 连接多个文件&#xff1a;3. 创建文件并通过终端写入内容4. 输出内容编号 Linux常用命令集&#xff08;cat指…

操作系统概述

概述 一、简单描述 1、系统资源的管理者&#xff1b; 2、最接近硬件的一层软件&#xff1b; 3、向上层提供方便容易使用的服务&#xff1b; 二、提供的功能 1、处理机管理&#xff1b; 2、储存器管理&#xff1b; 3、文件管理&#xff1b; 4、设备管理&#xff1b; 举例说明…

Redis学习——day01

Redis学习基础 Nosql&#xff1a;Redis入门&#xff1a;Redis安装&#xff1a;Windows&#xff1a;Linux安装&#xff1a; Nosql&#xff1a; Nosql Not Only Sql&#xff08;不仅仅Sql&#xff09;NoSQL&#xff0c;泛指非关系型的数据库。随着互联网web2.0网站的兴起&#…

了解 AlphaFold2 论文必备知识,不会有人还不知道吧

你知道 AlphaFold2 吗&#xff1f;它真正解决了蛋白质三维结构预测的算法困境&#xff0c;堪称蛋白质界的 chat-GPT4&#xff0c;甚至它的意义不是 chat-GPT4 所能够匹敌的。它为世界疾病治疗药物开发以及探究生物生命之谜提供了通向天神的一条道路&#xff0c;未来是生物的世纪…

深入与浅谈 Vue 中计算属性和侦听器的区别和使用(Vue3版本为例)

#五一技术创作马拉松# &#x1f4cb;前言 计算属性 computed 和侦听器 watch 都是 Vue.js 框架中用来响应式更新视图的重要概念。在 Vue 项目开发中&#xff0c;这两个技术点是非常重要的&#xff0c;同时也是 Vue 基础中不可缺少的知识点。在面试中&#xff0c;计算属性 comp…

【前端知识】内存泄漏与垃圾回收机制 (下)

【前端知识相关分享】内存泄漏与垃圾回收机制 &#xff08;下&#xff09; 6. 内存泄漏的解决方法6.1 解决方法概述6.2 什么是垃圾6.3 垃圾回收机制的定义及规则6.4 垃圾回收算法的基本流程 7. 垃圾回收的常见算法7.1 引用计数7.2 标记清除7.3 复制算法7.4 标记整理&#xff08…

十大经典排序算法总结(C语言版本)

前言&#xff1a;排序算法是最经典的算法知识&#xff0c;也是每个合格程序员应该需要掌握的知识点。考虑到排序算法通常代码简短&#xff0c;逻辑思维强和应用范围广等特性&#xff0c;排序算法题目便成为了面试中的常客。在面试中最常考的是快速排序和归并排序等基本的排序算…

SQL(基础)

DDL: 数据定义语言 Definition&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;CREATE、DROP、ALTER DML: 数据操作语言 Manipulation&#xff0c;用来对数据库表中的数据进行增删改 INSERT、UPDATE、DELETE 注意&#xff1a; DDL是改变表的结构 DML…

一以贯之:从城市网络到“城市一张网”

《论语里仁》中子曰&#xff1a;“参乎&#xff0c;吾道一以贯之”。 孔子所说的“一以贯之”&#xff0c;逐渐成为了中国文化与哲学的重要组成部分&#xff0c;指明事物发展往往需要以标准化、集约化、融合化作为目标。这种智慧在数字化发展中格外重要。从云计算、大数据技术模…

一个快速去除黑背景和其他颜色背景,生成透明PNG图的小工具

做粒子效果或者其他一些图案的时候&#xff0c;时常能找到不少原图&#xff0c;但是却有黑色的背景或者其他背景色&#xff0c;导致用起来比较麻烦。这个小工具就可以方便的去除黑背景&#xff0c;生成透明PNG图&#xff0c;可以把想要的图案方便的取出来。 链接请见&#xff…

【Arduino 和 DS3231 实时时钟教程】

【Arduino 和 DS3231 实时时钟教程】 1. 概述2. 原理分析3. DS3231 实时时钟4. 编程1. 概述 在本Arduino教程中,我们将学习如何使用DS3231实时时钟模块。您可以观看以下视频或阅读下面的书面教程。 2. 原理分析 这里出现的第一个问题是,当Arduino本身具有内置计时器时,为什…

利用倾斜摄影超大场景的三维模型轻量化技术如何提高网络传输的效率?

利用倾斜摄影超大场景的三维模型轻量化技术如何提高网络传输的效率&#xff1f; 倾斜摄影超大场景的三维模型轻量化在网络传输中的效率可以通过以下几个方面进行提高&#xff1a; 一、数据压缩 对于倾斜摄影超大场景的三维模型数据&#xff0c;可以采用数据轻量化压缩技术进…

如何利用ChatPDF快速阅读英文论文,帮你写文章

如何利用ChatPDF快速阅读英文论文&#xff0c;帮你写文章 英语渣狂喜&#xff5e;确实惊艳到我了&#xff01; 使用平台&#xff1a;https://www.chatpdf.com/ 1、上传PDF 访问官网&#xff1a;https://www.chatpdf.com/&#xff0c;界面很美&#xff0c;点击直接上传 PDF&…

Python小姿势 - Python学习笔记——类与对象

Python学习笔记——类与对象 类与对象是面向对象编程的两个基本概念。类是对象的抽象概念&#xff0c;对象是类的具体表现。 类是对一类事物的抽象&#xff0c;它是描述一类事物的模板&#xff0c;而对象是类的具体表现。对象是类的实例&#xff0c;类是对象的模板。 举个例子&…

【Midjourney】Midjourney 连续性人物创作 ④ ( 使用 URL + Seed 随机种子生成连续性的人物 )

文章目录 一、生成图片并获取 Seed二、使用 URL Seed 随机种子生成连续性的人物 使用 URL 链接 和 Seed 随机种子 生成连续性人物 , 必须先生成一组图片 , 然后按 U 按钮 , 选择一张大图 , 之后所有的连续性人物图片都基于该图片进行生成 ; 使用 URL Seed 随机种子生成连续性…

吴恩达与 OpenAI 联手打造《ChatGPT 提示工程》中文版教程,开启智能对话新篇章!

ChatGPT 的使用技巧 ChatGPT 上线至今&#xff0c;已经快5个月了&#xff0c;但是不少人还没真正掌握它的使用技巧。 其实&#xff0c;ChatGPT 的难点&#xff0c;在于 Prompt&#xff08;提示词&#xff09;的编写&#xff0c;OpenAI 创始人在今年2月时&#xff0c;在Twitter…

数据结构学习分享之顺序表详解

数据结构第二课 1. 前言2. 线性表3. 顺序表3.1 概念以及结构3.11 静态顺序表3.12 动态顺序表 4. 顺序表的实现4.1 顺序表内容的命名4.2 初始化结构4.3 初始化函数4.4 扩容函数4.5 尾插函数4.6 打印函数4.7 尾删函数4.8 头插函数4.9 头删函数4.10 销毁顺序表 5. 写代码时应该注意…

安装python以及编辑器pycharm

文章目录 前言一、安装python1.安装python2.测试python3.查看环境变量 二、安装Pycharm1.下载Pycharm2.查看环境变量3.测试 总结 前言 python是重要的程序语言之一 本文介绍如何安装python&#xff0c;以及如何安装python编辑器----Pycharm 一、安装python 1.安装python 首先…

SpringCloud_OpenFeign服务调用和Resilience4J断路器

文章目录 一、负载均衡概论1、服务器负载均衡2、客户端负载均衡3、客户端负载均衡策略(SpringCloudRibbon)4、客户端负载均衡策略(SpringCloudLoadBalancer) 二、SpringCloudOpenFeign服务调用1、OpenFeign服务调用的使用2、OpenFeign服务调用的日志增强3、OpenFeign服务调用超…