- 要使用Db类必须使用门面方式(think\facaed\Db) 调用
- 数据库操作同一入口:Db::
数据库管理软件
- phpMyAdmin (网页数据库)
- Navicat for MySql (windows软件数据库管理)
创建数据库
- 管理员表
CREATE TABLE `shop_admin` (
`uid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`account` varchar(50) NOT NULL COMMENT '账户',
`password` char(32) NOT NULL COMMENT '密码',
`name` varchar(50) NOT NULL COMMENT '姓名',
`status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1开启 2关闭',
`add_time` int(10) unsigned NOT NULL COMMENT '添加时间',
PRIMARY KEY (`uid`)
)ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='后台管理员';
INSERT INTO`shop_admin`VALUES(1,'admin','e10adc3949ba59abbe56e057f20f883e','小周',1,1809620325)
- 商品分类表
DROP TDROP TABLE IF EXISTS `shop_cat`;
CREATE TABLE `shop_cat` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(50) NOT NULL COMMENT '分类名',
`status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1开启 2关闭', PRIMARY key (`id`)
)ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COMMENT='分类表';
INSERT INTO `shop_cat` VALUES(1,'女装',1);
INSERT INTO `shop_cat` VALUES(2,'男装',1);
INSERT INTO `shop_cat` VALUES(3,'童装',1);
INSERT INTO `shop_cat` VALUES(4,'女鞋',1);
INSERT INTO `shop_cat` VALUES(5,'男鞋',1);
INSERT INTO `shop_cat` VALUES(6,'母婴',1);
- 商品表
CREATE TABLE `shop_goods`(
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '商品ID',
`cat` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '分类ID',
`title` varchar(200) NOT NULL COMMENT '商品标题',
`price` double(10,2) unsigned NOT NULL COMMENT '价格',
`discount` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '折扣',
`stoke` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '库存',
`status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1开启 2关闭 3删除', `add_time` int(10) unsigned NOT NULL COMMENT '添加时间', PRIMARY KEY(`id`)
)ENGINE=MyISAM AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COMMENT='商品表';
INSERT INTO `shop_goods` VALUES(1,1,'lolita裙原创外套斗篷洛丽塔裙子冬季',999.99,0,1100,1,1605163489);
INSERT INTO `shop_goods` VALUES(2,1,'樱洛芙Lolita原创小裙子',499.99,0,100,1,1605163589);
- 菜单表
CREATE TABLE `shop_menu`(
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `title` varchar(50) NOT NULL COMMENT '菜单名',
`fid` int(10) NOT NULL COMMENT '父ID',
`status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1开启 2关闭',
PRIMARY key(`id`)
)ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COMMENT='左侧菜单栏';
INSERT INTO `shop_menu` VALUES(1,'商品管理',0,1);
INSERT INTO `shop_menu` VALUES(2,'商品列表',1,1);
INSERT INTO `shop_menu` VALUES(3,'商品分类',1,1);
INSERT INTO `shop_menu` VALUES(4,'用户管理',0,1);
INSERT INTO `shop_menu` VALUES(5,'用户列表',4,1);
INSERT INTO `shop_menu` VALUES(6,'购物车',4,1);
INSERT INTO `shop_menu` VALUES(7,'用户地址',4,1);
INSERT INTO `shop_menu` VALUES(8,'订单管理',4,1);
INSERT INTO `shop_menu` VALUES(9,'后台管理',0,1);
INSERT INTO `shop_menu` VALUES(10,'管理员列表',9,1);
INSERT INTO `shop_menu` VALUES(11,'个人中心',9,1);
INSERT INTO `shop_menu` VALUES(12,'左侧菜单',9,1);
连接数据库
如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式。
在全局或者应用配置目录下面的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',
// 数据库连接配置信息
'connections' => [ 'mysql' => [
// 数据库类型
'type' => env('database.type', 'mysql'),
// 服务器地址
'hostname' => env('database.hostname', '127.0.0.1'),
// 数据库名
'database' => env('database.database', ''),
// 用户名
'username' => env('database.username', 'root'),
// 密码 'password' => env('database.password', ''), // 端口 '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, ],
// 更多的数据库配置信息 ], ];
执行原生Mysql
1、query方法用于执行Mysql查询操作
public function index(){
$query=Db::query("SELECT * FROM `shop_goods` where status=1");
print_r($query);
}
2、execute方法用于执行Mysql新增和修改操作
public function index(){
$execute=Db::execute("INSERT INTO `shop_goods` VALUES(3,1,'MOISELLE慕诗春夏重工亮片红色长款收腰连衣裙',999.99,0,1100,1,1605163489))");
print_r($execute);
$excute=Db::execute("UPDATE `shop_goods` set `price`='8808' where `id`=3");
print_r($execute);
}
框架内-查询操作
1、单条数据查询 find
- find 方法查询结果不存在,则返回null,否则返回结果数组
public function index(){
$find=Db::table('shop_goods')->find(2);
print_r($find);
}
2、多条数据查询 select
- select方法查询结果是一个二维数组,如果结果不存在,返回空数组
public function index(){
$select=Db::table('shop_goods')->select();
print_r($select);
}
3、查询某个字段的值 value
- value方法查询结果不存在,返回null
public function index(){
$value=Db::table('shop_goods')->value('title');
print_r($value);
}
4、查询某一列的值 column
- column 方法查询结果不存在,返回空数据
public function index(){
$column=Db::table('shop_goods')->column('title');
print_r($column);
$columns=Db::table('shop_goods')->column('title','id');
print_r($columns);
}
添加
1、添加一条数据 insert
- insert 方法添加数据成功返回添加成功的条数,通常情况返回1
public function index(){
$data=['cat'=>'1','title'=>'小魔仙Lolita洛丽塔','price'=>'398','add_time'=>1605163689];
$insert=Db::table('shop_goods')->insert($data);
print_r($insert);
}
2、添加一条数据 insertGetId
- insertGetId 方法符合数据成功返回数据的自增主键
public function index(){
$data=['cat'=>'1','title'=>'秋冬新款洋气百搭简约打底衫','price'=>'128','add_time'=>1605163689];
$insert=Db::table('shop_goods')->insertGetId($data);
print_r($insert);
}
3、添加多条数据 insertAll
- insertAll 方法添加数据成功后返回添加成功的条数
public function index(){
$data=[
['cat'=>'2','title'=>'灯芯绒夹克','price'=>'248','add_time'=>1605163689],
['cat'=>'1','title'=>'半高领德绒连衣裙','price'=>'128','add_time'=>1605163689],
['cat'=>'2','title'=>'长款风衣','price'=>'328','add_time'=>1605163689]
];
$insert=Db::table('shop_goods')->insertAll($data);
print_r($insert);
}
修改
1、修改数据 update
- update 方法返回影响数据的条数,没修改任何数据返回0
public function index(){
$data=['price'=>'68'];
$update=Db::table('shop_goods')->where('id',2)->update($data);
print_r($update);
}
2、自增inc
- inc方法自增一个字段的值
public function index(){
$inc=Db::table('shop_goods')->where('id',3)->inc('stock')->update();
print_r($inc); //字段的值增加5
$inc=Db::table('shop_goods')->where('id',6)->inc('stock',5)->update();
print_r($inc);
}
3、自减dec
- dec方法自减一个字段的值
public function index(){
//字段的值减去1
$dec=Db::table('shop_goods')->where('id',7)->dec('stock')->update();
print_r($dec);
//字段的值减去5
$dec=Db::table('shop_goods')->where('id',7)->dec('stock',5)->update();
print_r($dec);
}
删除
1、删除数据 delete
- delete 方法返回影响数据的条数,没有删除返回0
public function index(){
//根据条件删除数据
$delete=Db::table('shop_goods')->where('id',1)->delete();
print_r($delete);
//删除主键为2的数据
$delete=Db::table('shop_goods')->delete(2);
//删除整表数据
$delete=Db::table('shop_goods')->delete(true);
print_r($delete);
}
2、软删除 useSoftDelete
- 业务数据不建议真实删除数据,TP系统提供了软删除机制
public function index(){
//软删除
$delete=Db::table('shop_goods')->useSoftDelete('status',3)->delete();
print_r($delete);
}
其他操作
- save方法统一写入数据,自动判断是新增还是更新数据(已写入数据中是否存在主键数据为依据)
public function index(){
//添加数据
$data=['cat'=>'2','title'=>'长款风衣','price'=>'328','add_time'=>1605163689];
$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提供了很多处理数据集的方法
方法 | 描述 |
---|---|
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查询过滤数组中的元素 |
public function index(){
$select=Db::table('shop_goods')->select();
if($select->isEmpty()){
echo "未找到数据";
}
print_r($select->toArray());
}