博客列表 >5.【TP6学习笔记】tp中的数据库增删改查相关操作

5.【TP6学习笔记】tp中的数据库增删改查相关操作

 一纸荒凉* Armani
 一纸荒凉* Armani原创
2021年05月29日 15:15:461129浏览

ThinkPHP6 数据库

  • ThinkPHP6 数据库和模型操作已经独立为ThinkORM库

  • 要使用Db类必须使用门面方式( think\facade\Db)调用

  • 数据库操作统一入口: Db::

一、数据库管理软件

1,phpMyAdmin(网页数据库管理)

2,Navicat for MySql(windows软件数据库管理)

二、创建数据库

1、管理员表

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, 'ouyangke', 'e10adc3949ba59abbe56e057f20f883e', '欧阳克', 1, 1576080000);

2、商品分类表

DROP 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);INSERT INTO `shop_cat` VALUES (7, '电脑', 1);

3、商品表

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 '折扣',  `stock` 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, '云朵般轻盈的仙女裙 高级钉珠收腰长裙 气质无袖连衣裙', 279.99, 0, 1100, 1, 1576080000);INSERT INTO `shop_goods` VALUES (2, 1, '高冷御姐风灯芯绒a字连衣裙女秋冬2019年新款收腰显瘦复古裙子', 255.90, 0, 100, 1, 1576080000);

4、菜单表

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);

三、执行原生 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, '2019秋冬新款时尚简约纯羊绒加厚圆领羊绒长裙显瘦气质连衣裙女', 1179.00, 0, 200, 1, 1576080000)");  print_r($execute);  $execute = Db::execute("UPDATE `shop_goods` set `price`='1100' where `id`=3 ");  print_r($execute);}

四、查询语句

1、单条数据查询 find

  • find方法查询结果不存在,返回 null,否则返回结果数组

public function index(){  $find = Db::table('shop_goods')->find(5);  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);  $column = Db::table('shop_goods')->column('title','id');  print_r($column);  $column = Db::table('shop_goods')->column('*','id');  print_r($column);}

五、添加语句

1、添加一条数据 insert

  • insert方法添加数据成功返回添加成功的条数,通常情况返回 1

public function index(){  $data = ['cat'=>'1','title'=>'日系小浪漫与温暖羊毛针织拼接网纱百褶中长收腰连衣裙','price'=>'1598.35','add_time'=>1576080000];  $insert = Db::table('shop_goods')->insert($data);  print_r($insert);}

2、添加一条数据 insertGetId

  • insertGetId方法添加数据成功返回添加数据的自增主键

public function index(){  $data = ['cat'=>'1','title'=>'针织毛衣连衣裙2019秋冬新款气质宽松羊毛长袖中长款休闲打底裙女','price'=>'690.00','add_time'=>1576080000];  $insert = Db::table('shop_goods')->insertGetId($data);  print_r($insert);}

3、添加多条数据 insertAll

  • insertAll方法添加数据成功返回添加成功的条数

public function index(){  $data = [    ['cat'=>'1','title'=>'秋冬加厚连衣裙女超长款宽松羊绒衫高领套头过膝毛衣百搭针织长裙','price'=>'658.00','add_time'=>1576080000],    ['cat'=>'1','title'=>'2019新款秋冬慵懒风宽松毛衣针织连衣裙复古港味网红两件套','price'=>'408.00','add_time'=>1576080000],    ['cat'=>'2','title'=>'男士长袖t恤秋季圆领黑白体恤T 纯色上衣服打底衫男装','price'=>'99.00','add_time'=>1576080000]  ];  $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',8)->update($data);  print_r($update);}

2、自增 inc

  • inc方法自增一个字段的值

public function index(){  $inc = Db::table('shop_goods')->where('id',5)->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',8)->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);  print_r($delete);  # 删除主键为4,5,6的数据  $delete = Db::table('shop_goods')->delete([4,5,6]);  print_r($delete);  # 删除整表数据  $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(2);  print_r($delete);}

八、其他操作

  • save方法统一写入数据,自动判断是新增还是更新数据(以写入数据中是否存在主键数据为依据)。

public 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提供了很多处理数据集的方法

方法描述
toArray转换为数组
isEmpty是否为空
all所有数据
merge合并其它数据
diff比较数组,返回差集
flip交换数据中的键和值
intersect比较数组,返回交集
keys返回数据中的所有键名
pop删除数据中的最后一个元素
shift删除数据中的第一个元素
unshift在数据开头插入一个元素
push在结尾插入一个元素
reduce通过使用用户自定义函数,以字符串返回数组
reverse数据倒序重排
chunk数据分隔为多个数据块
each给数据的每个元素执行回调
filter用回调函数过滤数据中的元素
column返回数据中的指定列
sort对数据排序
order指定字段排序
shuffle将数据打乱
slice截取数据中的一部分
map用回调函数处理数组中的元素
where根据字段条件过滤数组中的元素
whereLikeLike查询过滤元素
whereNotLikeNot Like过滤元素
whereInIN查询过滤数组中的元素
whereNotInNot IN查询过滤数组中的元素
whereBetweenBetween查询过滤数组中的元素
whereNotBetweenNot Between查询过滤数组中的元素
public function index(){    $select = Db::table('shop_goods')->select();    if($select->isEmpty()){        echo '未找到数据';    }    print_r($select->shuffle()->toArray());}

十、示例代码

controller代码

namespace app\controller;use think\facade\View;use think\facade\Db;class Index{    public function index(){        $title = '商城';        $login = 'zhangshuai';        // 将其查询出来的菜单转换为我们之前二维数组的形式        $menu = Db::table('shop_menu')->where('fid',0)->select();        $left = $menu->toArray();        // 根据一级菜单的id查询出二级菜单        foreach($left as &$left_v){            $left_v['lists'] = Db::table('shop_menu')->where('fid',$left_v['id'])->select();        }        // 将其商品列表查询出来转换为之前的商品数组形式        $list = Db::table('shop_goods')->select();        $right = $list->toArray();        // 根据分类ID查询出分类名称        foreach($right as &$right_v){            $right_v['cat'] = Db::table('shop_cat')->where('id',$right_v['cat'])->value('name');        }        View::assign([            'title'  => $title,            'login' => $login,            'left' => $left,            'right' => $right        ]);        return View::fetch();    }}

备注:上述查询出来的数据如下,和之前的静态数据一样结构

$left = [                [                    'title' => '商品管理',                    'lists' => [                        ['id' => 1,'title' => '商品列表'],                        ['id' => 2,'title' => '商品分类']                    ]                ],                [                    'title' => '用户管理',                    'lists' => [                        ['id' => 3,'title' => '用户列表'],                        ['id' => 4,'title' => '购物车'],                        ['id' => 5,'title' => '用户地址'],                        ['id' => 6,'title' => '订单管理']                    ]                ],                [                    'title' => '后台管理',                    'lists' => [                        ['id' => 7,'title' => '管理员列表'],                        ['id' => 8,'title' => '个人中心'],                        ['id' => 9,'title' => '左侧菜单列']                    ]                ]            ];            $right = [                [                    'id' => 1,                    'title' => '熙世界2019秋冬新款长袖杏色上衣连帽宽松刺绣文艺落肩袖加厚卫衣BF风',                    'cat' => '女装',                    'price' => 189,                    'discount' => 6,                    'stock' => 66,                    'status' => 1,                    'add_time' => '1576080000'                ],                [                    'id' => 2,                    'title' => '秋水伊人双面呢冬装2019年新款女装气质西装领撞色羊毛大衣外套女',                    'cat' => '女装',                    'price' => 699,                    'discount' => 7,                    'stock' => 66,                    'status' => 1,                     'add_time' => '1576080000'                ],                [                    'id' => 3,                    'title' => '微弹中高腰直脚牛仔裤男',                    'cat' => '男装',                    'price' => 179,                    'discount' => 8,                    'stock' => 66,                    'status' => 0,                    'add_time' => '1576080000'                ],                [                    'id' => 1,                    'title' => '男士长袖t恤秋季圆领黑白体恤T 纯色上衣服打底衫',                    'cat' => '男装',                    'price' => 99,                    'discount' => 9,                    'stock' => 66,                    'status' => 1,                     'add_time' => '1576080000'                ],            ];

view代码:index.html

{include file="public/head" /}{include file="public/left" /}<div class="main" style="padding:10px;">    <div class="content">        <span>商品列表</span>        <button class="layui-btn layui-btn-sm" onclick="add()">添加</button>        <div></div>    </div>    <table class="layui-table">        <thead>            <tr>                <th>ID</th>                <th>商品标题</th>                <th>分类</th>                <th>原价</th>                <th>折扣</th>                <th>现价</th>                <th>库存</th>                <th>状态</th>                <th>添加时间</th>                <th>操作</th>            </tr>        </thead>        <tbody>            {volist name="right" id="right_v"}                <tr>                    <td>{$right_v.id}</td>                    <td>{$right_v.title}</td>                    <td>{$right_v.cat}</td>                    <td>{$right_v.price}</td>                    <td>{$right_v.discount}</td>                    <td>                        {if $right_v.discount!=0}                            {$right_v.price*($right_v.discount/10)}                        {else/}                            {$right_v.price}                        {/if}                    </td>                    <td>{$right_v.stock}</td>                    <td>{if $right_v['status']==1}开启{else/}关闭{/if}</td>                    <td>{$right_v.add_time|date='Y-m-d'}</td>                    <td>                        <button class="layui-btn layui-btn-xs" onclick="edit()">编辑</button>                        <button class="layui-btn layui-btn-danger layui-btn-xs" onclick="del()">删除</button>                    </td>                </tr>            {/volist}        </tbody>    </table></div>{include file="public/bottom" /}
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议