thinkphp5.0数据库操作

Wesley13
• 阅读 505

ThinkPHP数据库处理:
1.MySQL的数据库连接
首先配置database.php文件
使用{dump(config('database));}来查看数据库的配置项
使用 {$res = Db::connect(); dump($res);}来查看数据库的连接信息
我们可以在{Db::connect()}中来配置数据库的连接,具体的方法为:
{
Db::connect([

// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'habbit',
// 用户名
'username' => 'root',
// 密码
'password' => 'root',
// 端口
'hostport' => '3306',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
]);
}

2.数据库的查询

3.数据库的插入
insert方法:
Db::name('表名(如果配置前缀名,可以省略)') -> insert([
"键" => "值"
]);
insert方法返回的是影响记录的行数

#insertGetId方法:
Db::name('表名(如果配置前缀名,可以省略)') -> insertGetId([
"键" => "值"
]);
insertGetId方法返回的是插入数据的自增id

#insertAll方法(可以一次插入多个数组):
Db::name('表名(如果配置前缀名,可以省略)') -> insertAll(数据);
insertAll方法返回的是插入成功的行数

4.数据的更新
#update方法:
Db::name('表名(如果配置前缀名,可以省略)') -> where(条件) -> update([
"键" => "值"
]);
返回的是被影响的行数。

#setField方法:
Db::name('表名(如果配置前缀名,可以省略)') -> where(条件) -> setField("键","值");

#setInc方法:
Db::name('表名(如果配置前缀名,可以省略)') -> where(条件) ->setInc("键",数值);
返回值为被影响行数,如果方法中不传数值即{setInc("键")},则每次执行,键对应的value会自增一,如果有数值,则每次自增数值

#setDec方法:
Db::name('表名(如果配置前缀名,可以省略)') -> where(条件) ->setDec("键",数值);
和setInc方法相反,setDec为自减。

5.数据的删除:
Db::name('表名(如果配置前缀名,可以省略)') -> where(条件) ->delete();
返回值为被影响行数
Db::name('表名(如果配置前缀名,可以省略)') -> delete("主键");

6.条件构造器
语法:
{where("id","","")} //字符串
{where([])} //数组
{where("id","EXP","in [1,2,3]")} //不会重构sql语句
EQ =
NEQ <> 不等于
LT <
ELT <=
GT >
EGT >=
BETWEEN BETWEEN * AND * 在*和*之间
NOTBETWEEN NOTBETWEEN * AND * 不在*和*之间
IN IN(*,*) 是*中的一个
NOTIN NOTIN(*,*) 不是*中的一个

whereOr方法:
{where(条件1)->whereOr(条件2)} //满足条件1或条件2

7.使用model层来封装方法:
#查询:
get(主键);//查询到对应主键的数据

all(function($query){
$query -> where(条件);
});

Model::where(条件)->select();

Model::where(条件)->value(字段名);//返回一个字符串

#添加:
Model::creat(数据);//插入数据,返回值为model对象
Model::creat(数据,true);//忽略数据库中没有的字段插入
Model::creat(数据,['字段1','字段2',...]);//只允许插入对应字段的数据

model->save();//使用save方法时必须实例化model,返回值为影响行数
model->allowField(true)->save(数据);//插入数据时忽略数据库中没有的字段
model->allowField(['字段1','字段2',...])->save(数据);//只允许插入对应字段的数据

model->saveAll(数据);//使用saveALl方法时必须实例化model,可以批量添加数据,返回值为model对象
其中添加的数据为一个二维数组:
$data = [
[第一条],
[第二条],
[第三条],
.
.
.
];

#更新数据:
Model::update(数组);//修改数据,如果有主键值(自增id),则不需要传递条件(不建议使用)
update(
"id" => 1,
"name" => "123"
);

update(数组,function($query){
$query->where(条件);
});//带有条件的数据更新

Model::where(条件)->update(数组);//更新特定的数据(建议使用)

Model->save(["username"=>"123"],function($query){
$query->where(条件);
});//将符合条件的username改为123(建议使用)

Model->saveAll(数组);//可以用来批量更新,其中传递的数组为二维数组,对应一组数据,其中的一维数组,对应一条数据(不建议使用)
{
$data = [
['id'=>1,'username'=>'123'],
['id'=>2,'username'=>'1234'],
['id'=>3,'username'=>'12345'],
.
.
.
];
}//批量修改id等于1,2,3的usernam

#删除:
destroy(主键);//删除对应主键的数据
destroy(['id'=>1]);//删除id=1的数据
destroy(function($query){
$query-where(条件);
})

Model::where(条件)->delete();

扩展{
limit(5)//输出5条
limit(5,5)//从第5条开始取5条

page(3,5)//第三页的5条数据 用于分页

group()//分组方法

order()//排序方法 DESC--倒序排序
}

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
tcp_tw_recycle参数引发的数据库连接异常
【问题描述】开发反馈有个应用在后端数据库某次计划性重启后经常会出现数据库连接异常问题,通过监控系统的埋点数据,发现应用连接数据库异常有两类表现:  其一:连接超时  <spanstyle"backgroundcolor:FFFF00"131148.00msTomcatConnectionPool</span  其二:连接耗时过
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
2年前
Django之Django模板
1、问:html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,比如数据库字段内容为2012082616:00:00,但是页面显示的却是Aug.26,2012,4p.m.答:为了页面和数据库中显示一致,需要在页面格式化时间,需要添加<td{{dayrecord.p\_time|date:
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
JAVA优化篇 如何从茫茫日志中找到运行缓慢的线程
引入  JAVA提供了一些分析DUMP的工具,比如jmap,visualvm等  JAVA还有寻找线程状态的工具,jstack等  数据库也有检查连接数,连接状态的命令,status,processlist等  代码中也可以添加一些时间的信息,对比信息发现可优化的地方  但这些都不是今天要记录的内容,今天要做的是使用一个比较
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
Laravel使用redis保存SESSION
Laravel使用redis保存SESSION首先确认服务器已经安装redis服务,php安装了redis扩展.1.打开config/database.php。在redis配置项中增加session的连接'session''host'
Wesley13 Wesley13
2年前
MongoDB 分片管理(一)检查集群状态
一、检查集群状态1.1使用sh.status()查看集群摘要信息1、使用sh.status()可以查看分片信息、数据库信息、集合信息sh.status()如果数据块较多时,使用sh.status(true)又是输出会很多,就不会截断,要使用如下查看2、tooman
Stella981 Stella981
2年前
Spring Security使用详解3(基于数据库的用户角色配置)
之前的文章样例中,认证数据都是定义在内存里。而在真实项目中,用户的基本信息以及角色等都存储在数据库中,因此需要从数据库中获取数据进行认证。本文通过样例进行演示。三、基于数据库的用户角色配置1、添加依赖、配置数据库本次样例使用MyBatis来操作数据库,首先在项目中添加MyBatis相关依赖,并进行数据库连接配置。(1