記事ディレクトリ
ThinkPHP6 データベース
- ThinkPHP6 のデータベースとモデルの操作は ThinkORM ライブラリとして独立しました
- Db クラスを使用するには、ファサード メソッド ( think\facade\Db ) 呼び出しを使用する必要があります。
- データベース操作の統合エントリ: Db::
1. データベース管理ソフトウェア
1. phpMyAdmin (Web ページ データベース管理) 2. Navicat for MySql (Windows ソフトウェア データベース管理)
2. データベースを作成する
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、商品分类表
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);
3. ネイティブ 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);
}
4. クエリ
1. 単一データクエリの検索
- find メソッドは、クエリ結果が存在しない場合は null を返し、存在しない場合は結果の配列を返します。
public function index(){
$find = Db::table('shop_goods')->find(5);
print_r($find);
}
2. 複数のデータクエリの選択
- select メソッドのクエリ結果は 2 次元配列であり、結果が存在しない場合は空の配列が返されます。
public function index(){
$select = Db::table('shop_goods')->select();
print_r($select);
}
3. フィールドの値をクエリする
- value メソッドのクエリ結果が存在しないため、null を返します
public function index(){
$value = Db::table('shop_goods')->value('title');
print_r($value);
}
4. 列の値列をクエリする
- カラムメソッドのクエリ結果が存在せず、空の配列が返される
public function index(){
$column = Db::table('shop_goods')->column('title');
print_r($column);
$column = Db::table('shop_goods')->column('title','id');
print_r($column);
}
5、追加
1. データ挿入を追加する
- 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 メソッドはデータを正常に追加し、正常に追加された項目の数を返します。
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);
}
6. 変更
1. 修正データ更新
- update メソッドは影響を受けるデータの数を返し、データが変更されていない場合は 0 を返します。
public function index(){
$data = ['price'=>'68'];
$update = Db::table('shop_goods')->where('id',8)->update($data);
print_r($update);
}
2.株式会社セルフインクリメント
- 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. 12 進数を減らす
- 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);
}
7. 削除
1.データ削除
- 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);
}
8. その他の操作
- 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 はデータセットを処理するための多くのメソッドを提供します
方法 | 説明 |
---|---|
toArray | 配列に変換する |
空です | 空いてますか? |
全て | すべてのデータ |
マージ | 他のデータを結合する |
差分 | 配列を比較し、差分を返す |
フリップ | データ内のキーと値を交換する |
交差する | 配列を比較し、交差部分を返します |
キー | データ内のすべてのキー名を返します |
ポップ | データの最後の要素を削除します |
シフト | データの最初の要素を削除します |
シフトを解除する | データの先頭に要素を挿入します |
押す | 最後に要素を挿入します |
減らす | ユーザー定義関数を使用して配列を文字列として返します。 |
逆行 | データの逆順並べ替え |
かたまり | データは複数のデータ ブロックに分割されます |
各 | データの各要素に対してコールバックを実行します。 |
フィルター | コールバック関数を使用してデータ内の要素をフィルターする |
桁 | データ内の指定された列を返します。 |
選別 | データを並べ替える |
注文 | フィールドの並べ替えを指定する |
シャッフル | データをスクランブルする |
スライス | データの一部を傍受する |
地図 | コールバック関数を使用して配列内の要素を処理します。 |
どこ | フィールド条件に基づいて配列内の要素をフィルタリングする |
どこのような | クエリフィルター要素と同様 |
好きじゃないところ | フィルタ要素とは異なります |
どこで | IN クエリは配列内の要素をフィルターします |
ここではない | Not IN クエリは配列内の要素をフィルターします |
どこの間 | 配列内のクエリ フィルター要素間 |
間ではない場所 | Not Between クエリは配列内の要素をフィルターします |
public function index(){
$select = Db::table('shop_goods')->select();
if($select->isEmpty()){
echo '未找到数据';
}
print_r($select->toArray());
}
10. 例
コントローラコード
namespace app\controller;
use think\facade\View;
class Index{
public function index(){
$title = '商城';
$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_v['id'])->select();
}
$list = Db::table('shop_goods')->select();
$right = $list->toArray();
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();
}
}
コードを表示: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" /}