PHP教程

thinkphp6-数据库

本文主要是介绍thinkphp6-数据库,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

连接数据库

数据库环境配置文件 .env

[DATABASE]
USERNAME =  root
PASSWORD =  root

数据库配置文件 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', 'tp6'),
            // 用户名
            '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,
        ],

        // 更多的数据库配置信息
    ],
];

控制器 app/controller/Index.php

<?php

namespace app\controller;

use \think\facade\Db;

class Index
{
    public function index()
    {
        try{
            $data = [
                ['name' => 'huyongjian', 'status' => 1],
                ['name' => 'huyongjian2', 'status' => 1],
                ['name' => 'huyongjian3', 'status' => 1],
                ['name' => 'huyongjian4', 'status' => 1],
                ['name' => 'huyongjian5', 'status' => 1],
            ];
            return Db::name('admin')->insertAll($data);

        }catch (\Exception $e){
            var_dump($e->getMessage());
        }

    }
}

mysql 创建数据库和数据表

create database tp6;
create table admin(
    `id` bigint unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(150) DEFAULT NULL COMMENT '名称', 
    `status` tinyint DEFAULT NULL COMMENT '状态', 
    PRIMARY KEY (`id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

测试与结果

http://127.0.0.1:8000/index
5

查看MySQL数据库结果

mysql> select * from admin;
+----+-------------+--------+
| id | name        | status |
+----+-------------+--------+
|  1 | huyongjian  |      1 |
|  2 | huyongjian2 |      1 |
|  3 | huyongjian3 |      1 |
|  4 | huyongjian4 |      1 |
|  5 | huyongjian5 |      1 |
+----+-------------+--------+
5 rows in set (0.01 sec)

查询构造器

查询数据

Db::table('admin')->where('id', 3)->find();
Db::table('admin')->where('status', 1)->select();
Db::table('admin')->where('status', 1)->select()->toArray();
Db::table('admin')->where('status', 1)->value('name');
Db::table('admin')->where('status', 1)->column('name');
Db::table('admin')->chunk(3, function($users) {
            foreach ($users as $user) {
                var_dump($user);
            }
        });

添加数据

$data = ['name' => 'huyongjian6', 'status' => 0];
Db::name('admin')->save($data);
$data = ['name' => 'huyongjian7', 'status' => 0];
Db::name('admin')->insert($data);
$data = [
    ['name' => 'huyongjian8', 'status' => 1],
    ['name' => 'huyongjian9', 'status' => 1]
];
Db::name('admin')->insertAll($data);
$data = [
    ['name' => 'huyongjian8', 'status' => 1],
    ['name' => 'huyongjian9', 'status' => 1]
];
Db::name('admin')->limit(100)->insertAll($data);

更新数据

Db::name('admin')->save(['id'=>1,'name'=>'HuYongJian','status'=>0]);
Db::name('admin')->where(['id'=>1])->update(['name'=>'huyongjian','status'=>1]);

删除数据

Db::name('admin')->delete(1);
Db::name('admin')->delete([2,3]);
Db::name('admin')->where('id',4)->delete();
Db::name('admin')->where('id','<', 6)->delete();

查询表达式

表达式    含义    快捷查询方法
=    等于    
<>    不等于    
>    大于    
>=    大于等于    
<    小于    
<=    小于等于    
[NOT] LIKE    模糊查询    whereLike/whereNotLike
[NOT] BETWEEN    (不在)区间查询    whereBetween/whereNotBetween
[NOT] IN    (不在)IN 查询    whereIn/whereNotIn
[NOT] NULL    查询字段是否(不)是NULL    whereNull/whereNotNull
[NOT] EXISTS    EXISTS查询    whereExists/whereNotExists
[NOT] REGEXP    正则(不)匹配查询(仅支持Mysql)    
[NOT] BETWEEN TIME    时间区间比较    whereBetweenTime
> TIME    大于某个时间    whereTime
< TIME    小于某个时间    whereTime
>= TIME    大于等于某个时间    whereTime
<= TIME    小于等于某个时间    whereTime
EXP    表达式查询,支持SQL语法    whereExp
find in set    FIND_IN_SET查询    whereFindInSet

聚合查询

Db::name('admin')->count();
Db::name('admin')->max('id');
Db::name('admin')->min('id');
Db::name('admin')->avg('id');
Db::name('admin')->sum('id');

分页查询

$list = Db::name('admin')->order('id', 'desc')->paginate(2);
$page = $list->render();
return view('index', ['list' => $list, 'page' => $page]);

时间查询

// 大于某个时间
Db::name('admin')
    ->whereTime('birthday', '>=', '1970-10-1')
    ->select();
// 小于某个时间
Db::name('admin')
    ->whereTime('birthday', '<', '2000-10-1')
    ->select();
// 时间区间查询
Db::name('admin')
    ->whereTime('birthday', 'between', ['1970-10-1', '2000-10-1'])
    ->select();
// 不在某个时间区间
Db::name('admin')
    ->whereTime('birthday', 'not between', ['1970-10-1', '2000-10-1'])
    ->select();
// 查询两个小时内的博客
Db::name('blog')
    ->whereTime('create_time','-2 hours')
    ->select();
// 查询2017年上半年注册的用户
Db::name('user')
    ->whereBetweenTime('create_time', '2017-01-01', '2017-06-30')
    ->select();

// 查询不是2017年上半年注册的用户
Db::name('user')
    ->whereNotBetweenTime('create_time', '2017-01-01', '2017-06-30')
    ->select();
Db::name('user')
    ->whereYear('create_time')
    ->select();
Db::name('user')
    ->whereYear('create_time', 'last year')
    ->select();
// 查询2018年注册的用户
Db::name('user')
    ->whereYear('create_time', '2018')
    ->select(); 
Db::name('user')
    ->whereMonth('create_time')
    ->select(); 
Db::name('user')
    ->whereMonth('create_time','last month')
    ->select();
Db::name('user')
    ->whereMonth('create_time', '2018-06')
    ->select(); 
Db::name('user')
    ->whereWeek('create_time')
    ->select(); 
Db::name('user')
    ->whereWeek('create_time', 'last week')
    ->select(); 
// 查询2019-1-1到2019-1-7的注册用户
Db::name('user')
    ->whereWeek('create_time', '2019-1-1')
    ->select(); 
Db::name('user')
    ->whereDay('create_time')
    ->select();
Db::name('user')
    ->whereDay('create_time', 'yesterday')
    ->select(); 
// 查询2018年6月1日注册的用户
Db::name('user')
    ->whereDay('create_time', '2018-06-01')
    ->select(); 
// 查询有效期内的活动
Db::name('event')
    ->whereTime('start_time', '<=', time())
    ->whereTime('end_time', '>=', time())
    ->select();

高级查询

Db::table('think_user')
    ->where([
        ['name', 'like', 'thinkphp%'],
        ['title', 'like', '%thinkphp'],
        ['id', '>', 0],
        ['status', '=', 1],
    ])
    ->select();
$map1 = [
        ['name', 'like', 'thinkphp%'],
        ['title', 'like', '%thinkphp'],
    ];

$map2 = [
        ['name', 'like', 'kancloud%'],
        ['title', 'like', '%kancloud'],
    ];    

Db::table('think_user')
    ->whereOr([ $map1, $map2 ])
    ->select();

事务操作

Db::transaction(function () {
    Db::table('admin')->find(6);
    Db::table('admin')->delete(7);
});
// 启动事务
Db::startTrans();
try {
    Db::table('admin')->find(6);
    Db::table('admin')->delete(7);
    // 提交事务
    Db::commit();
} catch (\Exception $e) {
    // 回滚事务
    Db::rollback();
}
这篇关于thinkphp6-数据库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!