Thinkphp6——数据库
- ThinkPHP6 数据库和模型操作已经独立为ThinkORM库
- 要使用Db类必须使用门面方式(
think\facade\Db
)调用 - 数据库操作统一入口:
Db::
我们可以在Navicat工具——查询中执行SQL命令,例如:
- 创建数据库
1 | DROP TABLE IF EXISTS `shop_cat`; |
执行原生sql语句
query
方法用于执行 MySql 查询操作1
2
3
4public function index(){
$query = Db::query("SELECT * FROM `shop_goods` where status=1");
print_r($query); // 返回值为二维数组
}execute
方法用于执行 MySql 新增和修改操作1
2
3
4
5
6public function index(){
$execute = Db::execute("INSERT INTO `shop_goods` VALUES (3, 1, '2019秋冬连衣裙女', 1179.00, 0, 200, 1, 1576080000)"); // 使用insert into 插入
print_r($execute);
$execute = Db::execute("UPDATE `shop_goods` set `price`='1100' where `id`=3 "); // 使用update更新
print_r($execute);
}
tp自带数据库操作方法
查询
单条数据查询
find
1
2
3
4public function index(){
$find = Db::table('shop_goods')->find(5);
print_r($find); //find 方法查询结果不存在,返回 null,否则返回一维数组
}注:我们一般只需关注查询操作的返回值类型
多条数据查询
select
1
2
3
4public function index(){
$select = Db::table('shop_goods')->select();
print_r($select); // 返回结果是object对象,可以转换为数组;
}获取单条记录(某行)某个字段的值
value
1
2
3
4public function index(){
$value = Db::table('shop_goods')->where('id'==1007)value('title');
print_r($value);
}查询某一列的值
column
1
2
3
4
5
6public function index(){
$column = Db::table('shop_goods')->column('title');
print_r($column);
$column = Db::table('shop_goods')->column('title','id');
print_r($column);
}
添加
添加一条数据
insert
1
2
3
4
5public function index(){
$data = ['cat'=>'1','title'=>'日系小浪漫连衣裙','price'=>'1598.35','add_time'=>1576080000];
$insert = Db::table('shop_goods')->insert($data); //返回添加成功的条数,通常情况返回 1
print_r($insert);
}添加一条数据
insertGetId
insertGetId
返回添加数据的自增主键(一般为id值嘛)
1
2
3
4
5public function index(){
$data = ['cat'=>'1','title'=>'针织毛衣裙女','price'=>'690.00','add_time'=>1576080000];
$insert = Db::table('shop_goods')->insertGetId($data);
print_r($insert);
}添加多条数据
insertAll
1
2
3
4
5
6
7
8
9public function index(){
$data = [
['cat'=>'1','title'=>'内裤','price'=>'658.00','add_time'=>1576080000],
['cat'=>'1','title'=>'秋裤','price'=>'408.00','add_time'=>1576080000],
['cat'=>'2','title'=>' 小丁','price'=>'99.00','add_time'=>1576080000]
];
$insert = Db::table('shop_goods')->insertAll($data);
print_r($insert); // 返回添加成功的条数
}
修改
修改数据
update
1
2
3
4
5public function index(){
$data = ['price'=>'68'];
$update = Db::table('shop_goods')->where('id',8)->update($data);
print_r($update); // 返回影响数据的条数
}inc
方法自增一个字段的值- 就是方便一点而已
1
2
3
4
5
6public function index(){
$inc = Db::table('shop_goods')->where('id',5)->inc('stock')->update();
print_r($inc);
$inc = Db::table('shop_goods')->where('id',6)->inc('stock',5)->update();
print_r($inc); // # 字段的值增加5
}dec
自减一个字段的值
删除
删除数据
delete
1
2
3
4
5
6
7
8
9
10
11public function index(){
# 根据条件删除数据
$delete = Db::table('shop_goods')->where('id',1)->delete();
print_r($delete);
# 删除主键为2的数据
$delete = Db::table('shop_goods')->delete(2); // 参数为主键值
print_r($delete);
# 删除整表数据
$delete = Db::table('shop_goods')->delete(true);
print_r($delete);
}软删除
useSoftDelete
- 业务数据不建议真实删除数据,TP系统提供了软删除机制
1
2
3
4
5public function index(){
# 软删除
$delete = Db::table('shop_goods')->useSoftDelete('status',3)->delete();
print_r($delete);
}
其他方法
save
方法统一写入数据,自动判断是新增还是更新数据1
2
3
4
5
6
7
8
9public function index(){
# 添加数据
$data = ['cat'=>'2','title'=>'美特斯邦威七分牛仔裤女2018夏季新款中腰修身洗水牛仔裤商场款','price'=>'49.90','add_time'=>1576080000];
$save = Db::table('shop_goods')->save($data);
print_r($save);
# 修改数据
$data = ['price'=>'99.00','id'=>3];
$save = Db::table('shop_goods')->save($data);
print_r($save);
Thinkphp
提供了很多处理数据集的方法
- 前面介绍了原生和tp6中的数据库CURD操作,对查询到的数据集也封装了很多方法处理,这些相当于工具,后面介绍工具使用的常用方法——链式操作
方法 | 描述 |
---|---|
toArray | 转换为数组 |
isEmpty | 是否为空 |
all | 所有数据 |
merge | 合并其它数据 |
diff | 比较数组,返回差集 |
flip | 交换数据中的键和值 |
intersect | 比较数组,返回交集 |
keys | 返回数据中的所有键名 |
pop | 删除数据中的最后一个元素 |
shift | 删除数据中的第一个元素 |
unshift | 在数据开头插入一个元素 |
push | 在结尾插入一个元素 |
reduce | 通过使用用户自定义函数,以字符串返回数组 |
reverse | 数据倒序重排 |
chunk | 数据分隔为多个数据块 |
each | 给数据的每个元素执行回调 |
filter | 用回调函数过滤数据中的元素 |
column | 返回数据中的指定列 |
sort | 对数据排序 |
order | 指定字段排序 |
shuffle | 将数据打乱 |
slice | 截取数据中的一部分 |
map | 用回调函数处理数组中的元素 |
where | 根据字段条件过滤数组中的元素 |
whereLike | Like查询过滤元素 |
whereNotLike | Not Like过滤元素 |
whereIn | IN查询过滤数组中的元素 |
whereNotIn | Not IN查询过滤数组中的元素 |
whereBetween | Between查询过滤数组中的元素 |
whereNotBetween | Not Between查询过滤数组中的元素 |
注:看看就行,常用toArray()
等
数据库链式操作
链式操作即增删改查配合新定义的方法在一条语句中完成对数据的多种操作
数据库提供的链式操作方法,可以有效的提高数据存取的代码清晰度和开发效率
连贯操作 作用 支持的参数类型 where* 用于AND查询 字符串、数组和对象 table 用于定义要操作的数据表名称 字符串和数组 name 用于定义要操作的数据表名称 字符串 field* 用于定义要查询的字段(支持字段排除) 字符串和数组 order* 用于对结果排序 字符串和数组 limit 用于限制查询结果数量 字符串和数字 page 用于查询分页(内部会转换成limit) 字符串和数字 注:带*标识的表示支持多次调用
还有很多其他方法,下面将介绍主要方法
链式操作一般配合表达式使用,表达式写在
where
里:表达式 含义 查询方法 = 等于 <> 不等于 > 大于 >= 大于等于 < 小于 <= 小于等于 [NOT] LIKE 模糊查询 whereLike/whereNotLike [NOT] BETWEEN (不在)区间查询 whereBetween/whereNotBetween [NOT] IN (不在)IN 查询 whereIn/whereNotIn [NOT] NULL 查询字段是否(不)是NULL whereNull/whereNotNull
where
查询
where
方法在链式操作方法里面是最常用的方法,可以完成包括普通查询、表达式查询、快捷查询、区间查询、组合查询在内的条件查询操作1
2
3
4
5
6
7
8
9
10
11$select = Db::table('shop_goods')->where('id','=','1')->select();
$select = Db::table('shop_goods')
->where('id','>','3')
->where('id','<','8')
->select();
$select = Db::table('shop_goods')->where('title','like','%连衣裙%')->select(); // 模糊查询
$select = Db::table('shop_goods')->where('title','not like','%连衣裙%')->select();
$select = Db::table('shop_goods')->where('id','not between',[6,10])->select();
$select = Db::table('shop_goods')->where('id','in','4,7,10')->select(); // [4,7,10]
field
主要作用是设定要返回或者操作的字段,可以用于查询和写入操作
1
2
3
4$select = Db::table('shop_goods')
->field('title,price,discount as d')
->where('status',1)
->select();
order
对操作的结果排序或者优先级限制
1
2
3
4
5
6$select = Db::table('shop_goods')
->field('title,price,id')
->where('status',1)
->order('price','DESC')
->order('id','DESC') // DESC 降序
->select();
limit
主要用于指定查询和操作的数量
1
2
3
4
5
6
7
8
9
10
11
12
13
14$select = Db::table('shop_goods')
->field('title,price,id')
->where('status',1)
->order('price','DESC') // 可以先使用order
->limit(0,5) // 从0开始,查询5条数据(不包括0)
->limit(4) // 从第4行开始查询后面所有行(不包括4)
->select(); // $offset $rowNums
$select = Db::table('shop_goods')
->field('title,price,id')
->where('status',1)
->order('price','DESC')
->page(1,5) // page 方法主要用于分页查询
->select();
聚合查询
使用聚合方法的查询
方法 功能 max 获取最大值,参数是要统计的字段名(必须) min 获取最小值,参数是要统计的字段名(必须) avg 获取平均值,参数是要统计的字段名(必须) sum 获取总数,参数是要统计的字段名(必须) count 统计数量,参数是要统计的字段名(可选) 1
2
3
4
5
6
7// 获取最小值,参数是要统计的字段名(必须)
$select = Db::table('shop_goods')->min('id');
print_r($select);
// 获取平均值,参数是要统计的字段名(必须)
$select = Db::table('shop_goods')->avg('id');
print_r($select);
注:在涉及到数据库操作的时候,往往需要结合php的一些原生方法,例如isset()
等
数据表 table
和 name
1 | # 使用table必须完整数据库名 |
- 前缀设置在database.php文件中
1 | return [ |
加油