ThinkPHP6.0 資料庫




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 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 ``##########白; ##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) unFAUL 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開啟 1開啟狀態1開啟刪除',

    `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字禦女裙女秋冬年新款收腰顯瘦復古裙子', 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);

}

五、新增

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

    # 刪除整表資料

    $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'=>'美特斯邦威七分牛仔褲女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);

    }#########備註:增刪查改是常規作業######9、資料集### #########Thinkphp提供了許多處理資料集的方法###
##所有資料##merge 合併其它資料diff 比較數組,傳回差集# flip 交換資料中的鍵和值intersect 比較數組,傳回交集 keys 傳回資料中的所有鍵名稱pop刪除資料中的最後一個元素shift 刪除資料中的第一個元素unshift在資料開頭插入一個元素##### ####push ######在結尾插入一個元素#############reduce ######透過使用使用者自訂函數,以字串傳回陣列### #########reverse ######資料倒序重排#############chunk ######資料分隔為多個資料區塊#### ###order 指定欄位排序#shuffle #將資料打亂slice 截取資料中的一部分map 用回呼函數處理陣列中的元素#where 根據欄位條件篩選陣列中的元素#whereLike Like查詢篩選元素#whereNotLike Not Like過濾元素#whereIn IN查詢篩選陣列中的元素#whereNotIn 
方法描述
#toArray #轉換為陣列
isEmpty 是否為空白
#all 
each 給資料的每個元素執行回呼
#filter 用回呼函數過濾資料中的元素
column 傳回資料中的指定欄位
sort #對資料排序
###Not IN查詢過濾陣列中的元素#############whereBetween ######Between查詢過濾陣列中的元素######## #####whereNotBetween ######Not Between查詢過濾陣列中的元素############

公共函數index(){

    $select = Db::table('shop_goods')->select();

    if($select - >isEmpty()){

        echo '未找到資料';

    }

    print_r($select->toArray());

##}

#十、範例

controller程式碼

namespace app\controller;

use think\facade\View;

class Index{

    public function index(){

        $title = '商城';

#        $login = '歐陽克';

        $login = '歐陽克';

##        $menu = Db::table('shop_menu')->where('fid',0)->select();

##        $left = $menu->toArray( );

        foreach($left as &$left_v){

            $left_v['lists'] = Db::table('shop_menu')->where('fid', $left_menu')->where('fid', $left_menu')->where('fid', $left_menu')->where('fid', $left_menu. ])->select();

        }

#        $list = Db::table('shop_goods')->select();

##   list   $right = $list ->toArray();

        foreach($right as &$right_v){

#          $right_v['cat'] = Db::table( 'shop_cat')->where(' id',$right_v['cat'])->value('name');

        }

        View::assign([

##   標題       View::assign([

##   標題 " $title,

            '登入' => $login,

            '左' => $left,

            '右' => $right

        ]);

        return View::fetch();

    }

#}

view程式碼:index.html

##{include file="public/head" /}

#{include file="public/left" /}

##

##   

        商品清單

       

       

#   

;

    <table class="layui-table">

        <thead>

            <tr<##            <tr<..##         ;/th>

                <th>商品標題</th>

           <th>原價< /th>

                <th>折扣</th>

             <th>庫存</th> ;

                <th>狀態</th>

             th>操作</th>

            </tr>

        </thead>

        </tbody>

        <) do>

        <) 的>

##        <dbody>>="#name

                <tr>

                    <)td>{$right_v.id};    <td>{$right_v.title}< /td>

                    <td>{$right_v.cat}</td>

o;

# #                    <td>{$right_v.discount}</td>

                   {if $right_v.discount!=0}

#                            {$ right_v.price*($right_v.discount/10)}

                        {else/}

##                        {/if}

                    </td>

                     {if $right_v['status']== 1}開啟{else/}關掉{/if}

                    {$right_v.add_time|date='Y-m-d'}##o # .>

                       

                   

</tr>

# ist}#  

       

##   

{include file="public/bottom" /}


#