ThinkPHP6.0 データベースチェーン操作



ThinkPHP6 データベース チェーン操作

  • データベースによって提供されるチェーン操作メソッドは、データ アクセス コードの明瞭さを効果的に改善し、開発効率を高め、すべての CURD 操作をサポートします

  • * のマークが付いたものは、複数の呼び出しをサポートします

## サポートされるパラメータの種類where*テーブル name field*order*limit page

1. 式クエリ

  • #式は SQL ステートメントの条件です

  • #式では大文字と小文字が区別されません
  • 式は where に記述されます
連続操作# 関数
AND クエリの場合文字列、配列、オブジェクト
の名前を定義するために使用されます。操作対象のデータテーブル 文字列と配列
操作対象のデータテーブルの名前を定義します。 Name String
は、クエリ対象のフィールドを定義するために使用されます (フィールドの除外をサポート)String および Array
は結果の並べ替えに使用されます文字列と配列
クエリ結果の数を制限するために使用されます文字列と数値
クエリのページングに使用されます (内部的に制限に変換されます)文字列と数値
##式意味クエリ メソッド = は # # と同じです# は # と等しくない> より大きい#<未満 ##[ NOT] LIKEファジー クエリwhereLike/whereNotLike##[NOT] BETWEEN(Not)Interval クエリwhereBetween/whereNotBetween[NOT] IN(Not in)IN クエリ whereIn/whereNotIn[NOT] NULLフィールドが NULL であるかどうかをクエリします。whereNull/whereNotNull

whereQuery

  • where メソッドはチェーン操作メソッドの中で最もよく使用されるメソッドで、通常のクエリ、式クエリ、クイック クエリ、間隔クエリと結合クエリを含む条件付きクエリ操作

# Equal to (=)

$select = Db::table('shop_goods')- > ;where('id','=','1')->select();

print_r($select->toArray());


# 等しくない (<>)

$select = Db::table('shop_goods')->where('id','<>',' 2')->select();

print_r($select->toArray());


より大きい (>)

$select = Db::table('shop_goods')->where('id','>','3')->select();

print_r( $select->toArray());


# 以上 (>=)

$select = Db::table( 'shop_goods' )->where('id','>=','4')->select();

print_r($select->toArray());


# 未満 (<)

$select = Db::table('shop_goods')->where('id','< ','5 ')->select();

print_r($select->toArray());


以下to (<=)

$select = Db::table('shop_goods')->where('id','<=','6')->select();

print_r($select->toArray());


# where

$select = Db::table(' shop_goods')

->where('id','>','3')

->where('id','<','8' )

->select();

print_r($select->toArray());


いいね

$select = Db::table('shop_goods')->where('title','like','%dress%')->select();

print_r( $select-> ;toArray());


# 気に入らない

$select = Db::table('shop_goods')->where ('title' ,'not like','%dress%')->select();

print_r($select->toArray());


# BETWEEN

$select = Db::table('shop_goods')->where('id','between','6,10')->select( );

print_r($select->toArray());


NOT BETWEEN

$select = Db::table ('shop_goods ')->where('id','not between',[6,10])->select();

print_r($select->toArray());


# IN

$select = Db::table('shop_goods')->where('id','in','4 ,7, 10')->select();

print_r($select->toArray());


# がありません

$select = Db::table('shop_goods')->where('id','not in',[4,7,10])->select();

print_r($select->toArray());

2. データ テーブル

#1、テーブルと名前

# は完全なものでなければなりませんデータベース名

$select = Db::table('shop_goods')->where('id','10')->select();

print_r($select -> ;toArray());

# データベースはプレフィックスを設定しません

$select = Db::name('shop_goods')->where('id',' 11')-> ;select();

print_r($select->toArray());

# データベース設定プレフィックス、プレフィックス アクセスなし

$select = Db::name ('list')->where('id','12')->select();

print_r($select->toArray());

2. データベース プレフィックス

データベース構成database.php

return [

'connections' => ; [

## ]

];

];

3. 戻り値

1 ,

field

フィールド メソッドの主な機能は、返されるフィールドまたは操作されるフィールドを識別することです。クエリ操作と書き込み操作に使用できます。

  • すべてのクエリメソッドが使用可能フィールドメソッドを使用

  • # String

  • $select = Db::table( 'shop_goods')
->field( 'title,price,discount as d')

->where('status',1)

-> ;select();

print_r($select ->toArray());

Array

$select = Db: :table('shop_goods')

- & gt; フィールド ([

# タイトル ',

' 価格 ',

' 割引 '= & GT

# 追加、追加できるのはこれらのフィールドのみです

## 複数のフィールド

$data = [

'タイトル' = > '新商品',

'価格' => 50,

'割引' => 8,


'add_time' => 1576080000

];

$insert = Db::table('shop_goods')

other; field( 'add_time')

-&gt; insert($ data);

#print_r($ insert);

#クエリすべてのフィールド、より高速

$ select = db :: table( 'shop_goods')

( '*')

。);

2,

withoutField

withoutField メソッドは、データ テーブルのフィールドを除外するために使用されます

Db::table('shop_goods')->withoutField('id')->select();

3、

fieldRaw

fieldRaw メソッドは mysql 関数を直接使用します
  • Db::table('shop_goods')->fieldRaw('id,sum(price)')->select();

  • 4. 並べ替え

1、

order
    メソッドは、操作の結果を並べ替えたり、優先順位を制限したりするために使用されます。
  • デフォルトの正の順序

asc 順順

desc 逆順

  • $select = Db::table ( 'shop_goods')

  • orderRaw

    メソッドでの mysql 関数の使用

  • $select = Db::table( 'shop_goods')

    -& GT; Field ('Title,価格, ID')
  • ## -& GT; where ('ステータス', 1)
## -& GT; Orderraw; ("field(title,'price','discount','stock' )")

->select();

print_r($select->toArray()) ;

5. ページング

limit

メソッドは主にクエリと操作の数を指定するために使用されます

$select = Db::table( 'shop_goods')

->field('title,price,id')

->where(' status',1)

->order ('価格','DESC')

-& gt; 制限 (3)

& gt; select ();

## ($ select- & gt; toarray ())

$select = Db ::table('shop_goods')


',1)

->order('price','DESC')

->limit(0, 5)

->select() ;

print_r($select->toArray());

page

このメソッドは主にページング クエリに使用されます
  • $select = Db::table('shop_goods')

    ->field( 'title,price,id')
- & gt; where ('status', 1)

& gt; order ('price', 'desc')

-& gt (1,5)

->select();

print_r($select->toArray());

6. 集計クエリ

集計メソッドにデータがない場合、デフォルト値は 0 です。集計クエリは他のクエリ条件と一致させることができます

メソッド

##<>

##>=以上

##<=以下

関数統計の数、パラメータはカウントするフィールドの名前です (オプション) 最大値を取得します パラメータはカウントするフィールドの名前です (必須) 最小値を取得します。パラメータはカウントするフィールドの名前です (必須) 平均値を取得します。パラメータはカウントするフィールド名です (必須) sum合計数を取得します。パラメータはカウントするフィールド名 (必須)

// 数量をカウントします。パラメータはカウントするフィールド名です (オプション)

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

print_r($select);


// 最大値を取得します。パラメータはカウントするフィールド名です (必須)

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

print_r($select);


// 最小値を取得します。パラメータはカウントするフィールド名です (必須)

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

print_r($select) ;


// 平均値を取得します。パラメータはカウントするフィールド名です (必須)

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

print_r($select);


//合計数を取得します。パラメータはカウントするフィールド名です (必須)

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

print_r($select);

7. 検索と並べ替えの例

コントローラー コード

public functionindex(){

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

}

# 右側のリスト

$param = Request::param();

if(isset($param['status']) && $param['ステータス'] == 1){

$where['ステータス'] = 1;

}else if(isset($param['ステータス']) && $ param['status'] == 2){

$where['status'] = 2;

}else{

$where = true;

}

$list = Db :: table ('shop_goods')

& GT; where ($ where)

## -& gtr ('add_time desc'

## -& gter ('' id desc ')

-& gt; select ();

## $ right = $ list -& gt; 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,

'左' => $left,

'right' => $right,

'ステータス' => isset($param['ステータス']) ? $param['status'] : null

]);

return View::fetch();

}

view代

<form class="layui-form" method="post">

<div class="layui-form-item" style="margin-top :10px;">

<div class="layui-input-inline">

<select name="status">

< option value="0" {if $status==0}selected{/if}>全部</option>

<option value="1" {if $status==1}selected {/if}>开启</option>

<option value="2" {if $status==2}selected{/if}>关闭</option>

</select>

</div>

<button class="layui-btnlayui-btn-primary"><i class="layui-アイコン"></i>検索</button>

</div>

</form>

8. ページングの例

コントローラー コード

public functionindex(){

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

}

# 右リスト

$param = Request::param();

if(isset($param['status '] ) && $param['ステータス'] == 1){

$where['ステータス'] = 1;

}else if(isset($param['ステータス' ]) && $param['ステータス'] == 2){

$where['ステータス'] = 2;

}else{

$where = true ;

}

$p = isset($param['p']) ? $param['p'] : 1;

// 統計の合計

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

$list = Db::table('shop_goods')

#-&gt ;; $ when)

-&gt; order( 'add_time desc')

##-&gt( 'id desc')

##stos $ right as &$right_v){

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

}

View::assign([

'タイトル' => $title,

'ログイン' = > $login,

'left' => $left,

'right' => $right,

'count' => ceil ($ count/10),

'p' => $p,

'status' => isset($param['status']) ? $param['status '] : 0

]);

return View::fetch();

}

コードを表示

#<div class="layui-boxlayui-laypagelayui-laypage-default">

<a href="/index.php/Index/index?p={$p-1}&status={$status}" class="layui-laypage-prev {if $p<=1}layui -disabled{/if}">前のページ</a>

{for start="0" end="$count"}

{if $p == $ i 1 )

## "/index.php/Index/index?p={$i 1}&status={$status}">{$i 1}</a>

### {/for}

<a href="/index.php/Index/index?p={$p 1}&status={$status}" class="layui-レイページ-next { if $p>=$count}layui-disabled{/if}">次のページ</a>

</div>

9. テンプレートページング

#paginate

組み込みのページング実装を使用すると、ページネーション出力関数をデータに簡単に追加できます

レンダリング

ページめくりの HTML コードを取得します

  • ##total 合計数量を取得します

  • コントローラー コード

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

  • print_r($select);echo '<hr>';
  • foreach($select as $v){ print_r($v);echo '<hr>';

  • }

print_r($ select->render ());echo '


';

print_r('Total:'.$select->total());echo '
';

View ::assign([

'select' => $select

]);

return View::fetch();

viewcode

<div>{$select|raw}</div>

css代番号

.pagination {

display: inline-block;

padding-left: 0;

margin: 20px 0;

border-radius: 4px;

}

.pagination > li {

表示: inline;

}

.pagination >リー> a,

.ページネーション >リー>スパン {

位置:相対;

float: left;

パディング: 6px 12px;

margin-left: -1px;

line-height: 1.42857143;

color: #337ab7;

text-decoration: none;

background-color: #fff;

境界線: 1px 実線 #ddd;

}

.ページネーション > li:第一子 > a,

.ページネーション > li:第一子>スパン {

margin-left: 0;

border-top-left-radius: 4px;

border-bottom-left-radius: 4px;

}

.ページネーション > li:最後の子> a,

.ページネーション > li:最後の子>スパン {

border-top-right-radius: 4px;

border-bottom-right-radius: 4px;

}

.pagination > ;リー> a:hover,

.ページネーション >リー>スパン:ホバー、

.ページネーション >リー> a:focus,

.ページネーション >リー>スパン:フォーカス {

z-index: 2;

color: #23527c;

背景色: #eee;

境界線の色: #ddd;

}

.ページネーション > .アクティブ > a,

.ページネーション > .アクティブ >スパン、

.ページネーション > .アクティブ > a:hover,

.ページネーション > .アクティブ >スパン:ホバー、

.ページネーション > .アクティブ > a:focus,

.ページネーション > .アクティブ >スパン:フォーカス {

z-インデックス: 3;

カラー: #fff;

カーソル: デフォルト;

背景色: #337ab7;

border-color: #337ab7;

}

.ページネーション > .無効>スパン、

.ページネーション > .無効>スパン:ホバー、

.ページネーション > .無効>スパン:フォーカス、

.ページネーション > .無効> a,

.ページネーション > .無効> a:hover,

.ページネーション > .無効> a:focus {

color: #777;

カーソル: not-allowed;

背景色: #fff;

境界線の色: #ddd;

}

10. テンプレートのページングの例

count
max
min
avg
##list_rows ページごとの番号ページ 現在のページパスURL パス#クエリ フラグメント ページ変数
パラメータ説明
url 追加パラメータ
url アンカー ##var_page

コントローラコード

パブリック関数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();

}

# 右リスト

$param = リクエスト: :param();

if(isset($param['ステータス']) && $param['ステータス'] == 1){

$where['ステータス' ] = 1;

}else if(isset($param['status']) && $param['status'] == 2){

$where['status'] = 2 ;

}else{

$where = true;

}

$p = isset($param['p']) ? $param ['p'] : 1;

# thinkphp にはページングが付属しています

$list = Db::table('shop_goods')

- ->where( $ここで)

->order('add_time DESC')

->order('id DESC')

->paginate([

'list_rows'=> 10,

'query' => Request::param()

>toArray();

foreach($right as &$right_v){

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

}

View::assign([

'タイトル' => $title,

'ログイン' = &gt; $ login、

# 'left' =&gt; $ left、

# 'right' =&gt; $ right、

'list' =>

]);

return View::fetch();

}

viewcode

< div>{$paginate |raw};

11. SQL デバッグ

  • getLastSql 最後に実行された SQL ステートメントを出力します

  • getLastSql このメソッドは最後に実行された SQL レコードのみを取得できます

$select = Db::table('shop_goods')->select();
echo Db::getLastSql();
  • fetchSql メソッドは現在の SQL レコードを直接返しますSQL を実行せずに

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

12. 動的構成データベース

  • config ディレクトリ database.php ファイル

return [

「接続」 =>

=> get('データベース.ホスト名', '127.0.0.1' )、

## . 名前

'ユーザー名' => Env::get('database.username', 'root'),

# Env ::get('データベース.パスワード', 'ルート'),

. '),

// データベース接続パラメータ

' Params '= & gt; [],

## // データベース コーディングのデフォルトは UTF8

' Charset '= & Gt; env :: get (' database.charset ',' utf8 '),

## // データベーステーブルのプレフィックス

' prefix '= & gt ; env :: GET (' データベース .プレフィックス ',' ショップ _ '),

// データベース配備方法: 0 集中 (単一サーバー)、1 分散 (メインサーバー)

'デプロイ '= & gt; 0 ,

master_num '=&gt; 1、

//スレーブサーバーのシリアル番号を指定

#から - -

Shop_user Table in ouyangkeデータベース

CREATE TABLE `shop_user` (

`uid ` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ユーザー ID',

`account` varchar(50) NOT NULL コメント 'アカウント',

`パスワード` char(32) NOT NULL コメント 'パスワード',

`名前` varchar(50) NOT NULL コメント '名前',

`status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT 'ステータス 1 は 2Close です',

`add_time` int(10) unsigned NOT NULL COMMENT '時間を追加',

主キー (`uid`)

) ENGINE=MyISAM AUTO_INCREMENT =3 DEFAULT CHARSET=utf8mb4 COMMENT='バックエンド管理者';

  • #connect

    データベース接続情報を動的に設定する方法

Db::connect('ouyangke')->table('shop_user')->select( );

connect

メソッドが必要です。クエリの先頭で呼び出され、その後にクエリ メソッドが続く必要があります。そうしないと、一部のクエリが失敗するか、デフォルトのデータベース接続がそのまま使用される可能性があります。利用される###

13. WHRER チェーン操作 (一般的には使用されません)

  • クエリ式と同じ機能で、ThinkPHP は次のような簡単なクエリ メソッドを提供します

#連続操作関数サポートされるパラメータの種類whereOr * OR クエリの場合文字列、配列、オブジェクトwhereLike*ファジー クエリStringwhereNotLike*ファジー クエリ文字列whereBetween*Interval クエリStringwhereNotBetween*間隔クエリ内にありません String whereIn*IN クエリStringwhereNotIn*IN クエリにありませんStringwhereNull*フィールドが NULL かどうかをクエリString## whereNotNull*whereExists*##whereFindInSet*FIND_IN_SET クエリString#ここで、Raw*##String

14. その他のチェーン操作 (一般的には使用されません)

フィールドが NULLString
EXISTSQueryCharacter string でないかどうかをクエリします。
whereNotExists* EXISTS クエリにありませんString
whereBetweenTime*時間間隔の比較String
whereTime*時刻と日付のクイック クエリString
whereExp* 式クエリ、SQL 構文をサポートString
は、文字列条件の直接クエリと操作に使用されます
#グループ クエリのグループをサポートするために使用されますString##having join*union*個別 ロックキャッシュ comment #

15. トランザクション操作

  • InnoDB エンジンはトランザクション処理をサポートしますが、MyISAM はトランザクション処理をサポートしません

  • // 启动事务
    Db::startTrans();
    $data = ['cat'=>'1','title'=>'日系小浪漫与温暖羊毛针织拼接网纱百褶中长收腰连衣裙','price'=>'1598.35','add_time'=>1576080000];
    $insert = Db::table('shop_goods')->insert($data);
    if(empty($insert)){
        // 回滚事务
        Db::rollback();
    }else{
        // 提交事务
        Db::commit();
    }
  • transaction メソッドはデータベース トランザクションを操作します。クロージャ内のコードで例外が発生すると、自動的にロールバックされます

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

  • select を通じてデータベースがクエリされ、取得されたデータ セット オブジェクト

  • 返されたデータset オブジェクトは

    think\Collection で、配列と同じ使用法を提供し、いくつかの追加メソッドもカプセル化します

連続操作関数 サポートされるパラメーターの種類
alias 現在のデータ テーブルの別名を定義するために使用されます String
strict フィールド名が存在するかどうかを厳密に検出するかどうかを設定するために使用されます。 ブール値
クエリのサポートを行うために使用されます String
クエリを結合してサポートするために使用します 文字列と配列をサポートするために使用します
クエリを結合サポートに結合するために使用します文字列、配列、オブジェクト
クエリの個別サポートブール値
データベースのロック メカニズムブール値
クエリ キャッシュに使用複数のパラメーターをサポート
SQL コメントの場合String
force データセットの強制インデックス作成 String
partition 設定用 パーティション情報配列文字列
failException データがクエリされなかった場合に例外をスローするかどうかを設定するために使用されますブール値
sequence 自動インクリメント シーケンス名の設定に使用されますString
replace ブール値
extra 追加のクエリ ルールの設定に使用 文字列
duplicate DUPLCATE 情報の設定に使用されます配列文字列
プロシージャ 現在のクエリがストアド プロシージャ クエリであるかどうかを設定するために使用されますブール値
master マスター サーバーがデータを読み取るように設定するために使用されますブール値
view*ビュー クエリの場合 文字列、配列
#番号メソッド説明##1 2 3 4 5 6 7 8 9 ##10 shift データの最初の要素を削除します#データの各要素に対してコールバックを実行します17 filter コールバック関数を使用してデータ内の要素をフィルタリングする18 列 データ内の指定された列を返します#19#データを並べ替えますorder # #30whereNotBetweenフィルター配列内のクエリ要素の間ではありません
$select = Db::table('shop_goods')
            ->field('title,price,id')
            ->where('status',1)
            ->order('price','DESC')
            ->select();
if($select->isEmpty()){
    echo '未查询到数据';
}else{
    print_r($select->toArray());
}

準備: モデルでデータ セット クエリを実行すると、すべてのデータ セット オブジェクトが返されますが、think\model\Collection クラス (継承された think\Collection) が使用されますが、使用方法は一貫しています。

isEmpty空ですか
toArray 配列に変換
すべて すべてのデータ
マージ 他のデータをマージ
diff 配列を比較し、差分セットを返します
flip データ内のキーと値を交換します
intersect 配列を比較し、交差を返します
keys データ内のすべてのキー名を返します
pop データの最後の要素を削除します
11 unshift データの先頭に要素を挿入
12 push 最後に要素を挿入します
13 reduce ユーザー定義関数を使用して配列を文字列として返します
14 reverse 逆データ再配置
15 chunk データは複数のデータ ブロックに分割されます
16
sort20
フィールドの並べ替えを指定
21 shuffle データをシャッフルする
22 スライス インターセプトデータの一部
#23 mapコールバック関数を使用して配列内の要素を処理します
24 where フィールド条件に基づいて配列内の要素をフィルタリングします
25 whereLike Like クエリ フィルター要素
26 whereNotLike Not Like フィルター要素
#27 whereIn IN フィルター配列内の要素をクエリします。
28 whereNotIn Not IN クエリを実行します。フィルター配列の要素
29whereBetween Between クエリは配列内の要素をフィルターします