ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法

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的数据构造器中的方法可以像链式一样使用…

猜你喜欢

转载自blog.csdn.net/m0_63622279/article/details/130669623
今日推荐