数据库链接配置
数据库操作

连接数据库

参考资料:TP6 连接数据库官方文档
1.单链接配置
修改 app\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_',
        ],
    ],
];

2.多连接配置
篇幅太长就直接截图说明

值得一提的是,TP6 引入了 env 环境变量机制,并且环境变量机制优先于 database.php 配置
关于 evn ,我在之前的 部分配置与控制器 中有说明,找到开启开发调试模式,就能看到。
.env 代码 ↓

APP_DEBUG = true

[APP]
DEFAULT_TIMEZONE = Asia/Shanghai

[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = tp6
USERNAME = root
PASSWORD =
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true

[LANG]
default_lang = zh-cn

注意:.env 文件里的设置,与 database.php 的文件呼应关系如下
如果是多连接配置
请保持两个文件内相呼应一致
即,.env 有几个配置,database.php 就有几个配置
.env 配置 同理于 database.php ,只需要复制相同部分,然后在 database.php 修改标识部分即可

database.php文件
.env 文件

在数据操作时,可以通过 connect() 方法指定需要使用的数据库连接配置

数据库操作

参考资料:TP6 SQL调试官方文档
另,可以查询 app/vendor/topthink/framework/src/think/db/BaseQuery.php 文件,开启新世界

1.增
save() 单条新增,成功返回新增条数
insert() 单条新增,成功返回新增条数
insertAll() 多条新增,成功返回新增条数
insertGetId() 单条新增,成功返回新增数据自增ID
参考资料:TP6 添加数据官方文档

<?php
namespace app\index\controller;

use app\BaseController;
use think\facade\Db;

class Index extends BaseController
{
    public function index()
    {
//        单条数据插入,save() insert() 两种方法等同效果。
//        使用 save() 新增数据
//        $data = ['nickname' => 'save','email' => '123@snail.com'];
//        $ins = Db::name('tp')->save($data);

//        使用insert()新增数据
//        $data = ['nickname' => 'insert','email' => '123@snail.com'];
//        $ins = Db::name('tp')->insert($data);
//
//        多条数据插入 insertAll()
//        数据组合为二维数组
//        $data =
//            [
//                ['nickname' => 'insertAll1','email' => '123@snail.com'],
//                ['nickname' => 'insertAll2','email' => '123@snail.com']
//            ];
        //单条数据插入,但是返回插入数据自增ID。
        $data = ['nickname' => 'insertGetId','email' => '123@snail.com'];
        $ins = Db::name('tp')->insertGetId($data);

        if($ins){
           return "插入成功";
        }else{
            return "插入失败";
        }
    }
}

结果图 ↓

2.查
find() 单条查询,成功返回一维数组
select() 多条查询,成功返回二维数组
value() 查询某个字段的值,成功返回字符串
column() 查询某一列的值,成功返回二维数组
参考资料:TP6 查询数据官方文档

<?php
namespace app\index\controller;

use app\BaseController;
use think\facade\Db;

class Index extends BaseController
{
    public function index()
    {
//        查询ID为5的单条数据,返回一维数组
//        $data = Db::name("tp")->find("5");

//        查询数据库内所有数据,返回二维数组
//        $data = Db::name("tp")->select();

//        查询单条某个字段的值,返回字符串
//        $data = Db::name("tp")->where("id","5")->value("nickname");

//        查询多条数据,返回二维数组
        $data = Db::name("tp")->where("id",">","5")->column("*","id");
        dump($data);
    }
}

3.改
save() 单条修改,成功返回条数
update() 单/多条修改,成功返回条数
inc() 自增
dec() 自减
参考资料:TP6 更新数据官方文档

  1. save() 使用详解
<?php
namespace app\index\controller;

use app\BaseController;
use think\facade\Db;

class Index extends BaseController
{
    public function index()
    {
        //配置save() 修改数据,需要指定包含主键 id 才会修改数据,否则将会新增数据
        $data = ["id"=>"7","nickname" => "saveUp"];

        //打印修改前数据
        echo "修改前";
        dump(Db::name("tp")->find("7"));
        
        //修改数据
        Db::name("tp")->save($data);

        //打印修改后数据
        echo "修改后";
        dump(Db::name("tp")->find("7"));
    }
}

图↓

2. update() 详解

<?php
namespace app\index\controller;

use app\BaseController;
use think\facade\Db;

class Index extends BaseController
{
    public function index()
    {
        //组合数据形式,分别是update()使用,以及data()使用
        $updateUp = ["nickname" => 'updateUp'];
        $dataUp = ["nickname" => 'dataUp'];

        //打印修改前数据
        echo "打印修改前数据";
        dump(Db::name("tp")->find(7));

        //使用data()传值方式修改
        Db::name("tp")->where("id","7")->data($dataUp)->update();

        //打印data()传值修改后数据
        echo "打印data()传值修改后数据";
        dump(Db::name("tp")->find(7));

        //同时使用data() 和 update()传值方式,update() 法优先级于 data() 传值
        Db::name("tp")->where("id","7")->data($dataUp)->update($updateUp);

        //打印update()传值修改后数据
        echo "打印update()传值修改后数据,如果update()不优先级,数据应该无变化";
        dump(Db::name("tp")->find(7));
    }
}

图 ↓

  1. inc() dec() 详解
<?php
namespace app\index\controller;

use app\BaseController;
use think\facade\Db;

class Index extends BaseController
{
    public function index()
    {
        echo "将id为1的email自增一次 +2<br>";
        echo "自增前";
        dump(Db::name("tp")->find(1));
        Db::name("tp")->where("id","1")->inc("email",2)->update();
        echo "自增后";
        dump(Db::name("tp")->find(1));


        echo "将id为1的email自减一次 -1<br>";
        Db::name("tp")->where("id","1")->dec("email",1)->update();
        echo "自减后";
        dump(Db::name("tp")->find(1));
        
    }
}

图 ↓

4.删
delete() 影响数据的条数,没有删除返回 0
参考资料:TP6 删除数据官方文档

注意:慎用。不存在删库跑路说法
代码就免了🤣🤣🤣
一切数据均有其存在的价值

5.调试
fetchSql() 直接返回当前查询构造器组合语句,需与select() 配合使用
buildSql() 把当前查询构造器组合语句作为子查询返回,两边带有 ( 查询语句 ) ,不需要配合select()
这两种方法,均不会执行SQL语句

<?php
namespace app\index\controller;

use app\BaseController;
use think\facade\Db;

class Index extends BaseController
{
    public function index()
    {
        $where = [
            ["nickname","=","Snail"],
            ["nickname","=","Cry"]
        ];
        dump(Db::name("tp")->whereOr($where)->buildSql());
        dump(Db::name("tp")->whereOr($where)->fetchSql()->select());
    }
}

图 ↓