连接数据库
数据库环境配置文件 .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();
}