ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
使用tp6框架操纵数据库,首先要修改数据库配置文件(`config/database.php`),配置完毕后,便可以操作数据库了。然后记得使用时,将模块引入 `use think\facade\Db; `,接着便可以使用tp6数据构造器中的方法了。查询单个数据可以使用`find `或者 `select`,但是查询多条只能使用`select `方法。添加单个数据使用`save`,添加多条数据可以使用
ThinkPHP6 连接使用数据库
如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式。
配置文件 database.php
在全局或者应用配置目录(config)下面的database.php
中(后面统称为数据库配置文件)配置下面的数据库参数:
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'thinkphp',
// 数据库用户名
'username' => 'root',
// 数据库密码
'password' => '',
// 数据库连接端口
'hostport' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'think_',
],
],
];
新版采用多类型的方式配置,方便切换数据库。
default
配置用于设置默认使用的数据库连接配置。
connections
配置具体的数据库连接信息,default
配置参数定义的连接配置必须要存在。
type
参数用于指定数据库类型
type | 数据库 |
---|---|
mysql | MySQL |
sqlite | SqLite |
pgsql | PostgreSQL |
sqlsrv | SqlServer |
mongo | MongoDb |
oracle | Oracle |
每个应用可以设置独立的数据库连接参数,通常直接更改default
参数即可:
return [
'default' => 'admin',
];
切换连接 Db::connect
我们可以在数据库配置文件中定义多个连接信息
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'thinkphp',
// 数据库用户名
'username' => 'root',
// 数据库密码
'password' => '',
// 数据库连接端口
'hostport' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'think_',
],
'demo' => [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'demo',
// 数据库用户名
'username' => 'root',
// 数据库密码
'password' => '',
// 数据库连接端口
'hostport' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'think_',
],
],
];
我们可以调用Db::connect
方法动态配置数据库连接信息,例如:
\think\facade\Db::connect('demo')
->table('user')
->find();
connect
方法必须在查询的最开始调用,而且必须紧跟着调用查询方法,否则可能会导致部分查询失效或者依然使用默认的数据库连接。
动态连接数据库的connect
方法仅对当次查询有效。
这种方式的动态连接和切换数据库比较方便,经常用于多数据库连接的应用需求。
在tp6中使用原生的Mysql-小例子
原生的Mysql就是query方法和excute方法。
query方法用来执行MySql的查询操作
public function index(){
$query = Db::query("select * from `book`");
// 输出查询出的结果集数组
dump($query);
}
execute方法用来执行MySql新增和修改的操作
public function index(){
$execute = Db::execute("insert into `book` values(0,'大话数据结构','40','大牛')");
// 输出查询出的结果集数组
dump($execute);
}
示例:查询某张表所有信息并且返回
简单起见,我们直接在控制器中调用一下查询语句,然后将结果返回为字符串来查看。
首先,配置config/database.php数据库配置文件
<?php
return [
// 默认使用的数据库连接配置
'default' => env('database.driver', 'mysql'),
// 自定义时间查询规则
'time_query_rule' => [],
// 自动写入时间戳字段
// true为自动识别类型 false关闭
// 字符串则明确指定时间字段类型 支持 int timestamp datetime date
'auto_timestamp' => true,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 时间字段配置 配置格式:create_time,update_time
'datetime_field' => '',
// 数据库连接配置信息
'connections' => [
'mysql' => [
// 数据库类型
'type' => env('database.type', 'mysql'),
// 服务器地址
'hostname' => env('database.hostname', '127.0.0.1'),
// 数据库名 自己的
'database' => env('database.database', 'phpdemo'),
// 用户名
'username' => env('database.username', 'root'),
// 密码 自己的密码
'password' => env('database.password', 'root'),
// 端口
'hostport' => env('database.hostport', '3306'),
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => env('database.charset', 'utf8'),
// 数据库表前缀
'prefix' => env('database.prefix', ''),
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => true,
// 是否需要断线重连
'break_reconnect' => false,
// 监听SQL
'trigger_sql' => env('app_debug', true),
// 开启字段缓存
'fields_cache' => false,
],
// 更多的数据库配置信息
],
];
然后对控制器进行配置:
<?php
namespace app\controller;
use app\BaseController;
use think\facade\View; // 使用模板引擎
use think\facade\Db; // 使用Db数据
class Index extends BaseController
{
public function index()
{
$query = Db::query('select * from book');
dump($query) ;
}
}
需要注意的是,要想操作数据库,必须将对应的类导入进来use think\facade\Db
,这里的dump()函数其实和var_dump()几乎一样,输出数据类型,数据长度及内容。
当然,我们也可以将数据之间返回到前端页面,并且渲染出来
将控制器代码修改如下:
<?php
namespace app\controller;
use app\BaseController;
use think\facade\View; // 使用模板引擎
use think\facade\Db; // 使用Db数据
class Index extends BaseController
{
public function index()
{
$query = Db::query('select * from book');
view::assign('books',$query);
return view::fetch();
}
}
添加视图层 view/index/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table>
<tr>
<td>id</td>
<td>书名</td>
<td>价格</td>
<td>作者</td>
</tr>
{foreach $books as $key=>$book}
<tr>
<td>{$book['id']}</td>
<td>{$book['bookName']}</td>
<td>{$book['bookPrice']}</td>
<td>{$book['author']}</td>
</tr>
{/foreach}
</table>
</body>
</html>
访问测试渲染是否成功:
使用框架提供的MySql
ThinkPHP6 提供了一个很丰富的查询构造器,它包含以下内容:
查询数据,添加数据,更新数据,删除数据,查询表达式,链式操作,聚合查询,分页查询,时间查询,高级查询,视图查询,JSON字段,子查询,原生查询,获取查询参数。
只记录下最简单的crud操作…
1. 查询数据 find select
1.1 查询单个数据 find
查询单个数据使用find
方法:
// table方法必须指定完整的数据表名
Db::table('think_user')->where('id', 1)->find();
最终生成的SQL语句是:
SELECT * FROM `think_user` WHERE `id` = 1 LIMIT 1
find
方法查询结果不存在,返回null
,否则返回结果数组
1.2 查询数据集 select
查询多个数据(数据集)使用select
方法:
Db::table('think_user')->where('status', 1)->select();
最终生成的SQL语句是:
SELECT * FROM `think_user` WHERE `status` = 1
select
方法查询结果是一个数据集对象,如果需要转换为数组可以使用
Db::table('think_user')->where('status', 1)->select()->toArray();
tp6提供的框架查询操作,类似一种链式操作,先指明表名,然后指明条件,最后再进行查询(单个数据结果集用find或者select,多个数据结果集只能用select)。
2. 添加数据 save insertAll insertGetId
2.1 添加一条数据 save
可以使用save
方法统一写入数据,自动判断是新增还是更新数据(以写入数据中是否存在主键数据为依据)。
$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::name('user')->save($data);
或者使用 insert
方法向数据库提交数据
$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::name('user')->insert($data);
insert
方法添加数据成功返回添加成功的条数,通常情况返回 1
如果你的数据表里面没有
foo
或者bar
字段,那么就会抛出异常。
2.2 添加多条数据 insertAll
添加多条数据直接向 Db 类的 insertAll
方法传入需要添加的数据(通常是二维数组)即可。
$data = [
['foo' => 'bar', 'bar' => 'foo'],
['foo' => 'bar1', 'bar' => 'foo1'],
['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data);
insertAll
方法添加数据成功返回添加成功的条数
2.3 添加数据并且返回自增主键 insertGetId
添加数据后如果需要返回新增数据的自增主键,可以使用insertGetId
方法新增数据并返回主键值:
$data = [
['foo' => 'bar', 'bar' => 'foo'],
['foo' => 'bar1', 'bar' => 'foo1'],
['foo' => 'bar2', 'bar' => 'foo2']
];
$userId = Db::name('user')->insertGetId($data);
insertGetId
方法添加数据成功返回添加数据的自增主键
3. 删除数据 delete
// 根据主键删除
Db::table('think_user')->delete(1);
Db::table('think_user')->delete([1,2,3]);
// 条件删除
Db::table('think_user')->where('id',1)->delete();
Db::table('think_user')->where('id','<',10)->delete();
最终生成的SQL语句是:
DELETE FROM `think_user` WHERE `id` = 1
DELETE FROM `think_user` WHERE `id` IN (1,2,3)
DELETE FROM `think_user` WHERE `id` = 1
DELETE FROM `think_user` WHERE `id` < 10
delete
方法返回影响数据的条数,没有删除返回 0
4. 更新数据 save update
4.1 save
使用save方法更新数据
Db::name('user')->save(['id' => 1, 'name' => 'thinkphp']);
实际生成的SQL语句是:
UPDATE `think_user` SET `name`='thinkphp' WHERE `id` = 1
4.2 update
update
方法返回影响数据的条数,没修改任何数据返回 0.
使用update
方法。
Db::name('user')
->where('id', 1)
->update(['name' => 'thinkphp']);
实际生成的SQL语句是:
UPDATE `think_user` SET `name`='thinkphp' WHERE `id` = 1
小结
使用tp6框架操纵数据库,首先要修改数据库配置文件(config/database.php
),配置完毕后,便可以操作数据库了。
然后记得使用时,将模块引入 use think\facade\Db;
,接着便可以使用tp6数据构造器中的方法了。
查询单个数据可以使用find
或者 select
,但是查询多条只能使用select
方法。
添加单个数据使用save
,添加多条数据可以使用insertAll
,可以通过用insertGetId
方法新增数据并返回主键值.
删除数据可以使用delete
,更新数据使用save
或者update
。
tp6的数据构造器中的方法可以像链式一样使用…
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)