<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [http://www.hmoore.net/manual/thinkphp6\_0/1037538](http://www.hmoore.net/manual/thinkphp6_0/1037538) [TOC] # where 表達式查詢是官方推薦使用的查詢方式 ~~~ //注意使用字符串查詢條件(不推薦) :SELECT * FROM think_user WHERE type=1 AND status=1 Db::table('think_user')->whereRaw('type=1 AND status=1')->select(); //字符串查詢條件預處理 Db::table('think_user') ->whereRaw("id=:id and username=:name", ['id' => 1 , 'name' => 'thinkphp']) ->select(); //SELECT * FROM think_user WHERE `name`='thinkphp' AND id > 1 Db::table('think_user') ->where('id','>',1) ->where('name','thinkphp') ->select(); //關聯數組(主要用于等值`AND`條件)等值 and條件 傳入數組作為查詢條件: //SELECT * FROM think_user WHERE `name`='thinkphp' AND status = 1 Db::table('think_user')->where([ 'name' => 'thinkphp', 'status'=> 1 ])->select(); //索引數組條件查詢(推薦) // 傳入關聯數組作為查詢條件 //SELECT * FROM think_user WHERE `name`='thinkphp' AND status = 1 Db::table('think_user')->where([ ['name','=','thinkphp'], ['status','=',1] ])->select(); $where=[ ['inmonth','between',[1631808000,1633967999] ['company_id','=','1'] ]; Db::table('think_user')->where($where)->select(); //索引數組的組裝 $map[] = ['name','like','think']; $map[] = ['status','=',1]; Db::table('think_user')->where($map)->select(); //數組條件 $map['name'] = 'thinkphp';//普通查詢 $map['status'] = 1;//普通查詢 $map['id'] = ['>',1];//使用查詢表達式 $map['mail'] = ['like','%thinkphp@qq.com%'];//使用查詢表達式 Db::table('think_user')->where($map)->select(); ~~~ # table 指定操作的數據表。 ``` //table方法指定的數據表需要完整的表名 Db::table('think_user')->where('status>1')->select(); //可以指定數據庫 Db::table('think_user')->where('status>1')->select(); //name方式簡化數據表前綴的傳入(前綴可省略) Db::name('user')->where('status>1')->select(); ``` # alias 用于設置當前數據表的別名,便于使用其他的連貫操作例如join方法等 ~~~ //SELECT * FROM think_user a INNER JOIN think_dept b ON b.user_id= a.id Db::table('think_user') ->alias('a') ->join('think_dept b ','b.user_id= a.id') ->select(); //SELECT * FROM think_user user INNER JOIN think_dept dept ON dept.user_id= user.id Db::table('think_user') ->alias(['think_user'=>'user','think_dept'=>'dept']) ->join('think_dept','dept.user_id= user.id') ->select(); ~~~ # field 標識要返回或者操作的字段,可以用于查詢和寫入操作 ~~~ //SELECT id,nickname as name FROM user Db::table('user')->field('id,nickname as name')->select(); //SELECT id,nickname as name FROM user Db::table('user')->field(['id','nickname'=>'name'])->select(); ~~~ # strict 設置是否嚴格檢查字段名 ~~~ // 關閉字段嚴格檢查 Db::name('user') ->strict(false) ->insert($data); ~~~ >[danger]系統默認值是由數據庫配置參數`fields_strict`決定; 設置關閉全局的嚴格檢查配置`'fields_strict' => false,` # limit 指定查詢和操作的數量。 ~~~ Db::table('article')->limit(10)->select(); Db::table('article')->limit(10,25)->select(); ~~~ # page 用于分頁查詢。 ~~~ // 查詢第一頁數據 Db::table('article')->page(1,10)->select(); // 查詢第二頁數據 Db::table('article')->page(2,10)->select(); //`page`方法還可以和`limit`方法配合使用,例如: Db::table('article')->limit(25)->page(3)->select(); //等同 Db::table('article')->page(3,25)->select(); ~~~ # order 對操作的結果排序或者優先級限制。 ~~~ Db::table('user') ->where('status', 1) ->order('id', 'desc') ->limit(5) ->select(); //支持使用數組對多個字段的排序 Db::table('user') ->where('status', 1) ->order(['order','id'=>'desc']) ->limit(5) ->select(); ~~~ # group 用于結合合計函數,根據一個或多個列對結果集進行分組 ~~~ //我們都查詢結果按照用戶id進行分組統計:ELECT user_id,username,max(score) FROM score GROUP BY user_id Db::table('user') ->field('user_id,username,max(score)') ->group('user_id') ->select(); //也支持對多個字段進行分組:SELECT user_id,test_time,username,max(score) FROM user GROUP BY user_id,test_time Db::table('user') ->field('user_id,test_time,username,max(score)') ->group('user_id,test_time') ->select(); ~~~ # having 用于配合group方法完成從分組的結果中篩選(通常是聚合條件)數據 ~~~ //SELECT username,max(score) FROM score GROUP BY user_id HAVING count(test_time)>3 Db::table('score') ->field('username,max(score)') ->group('user_id') ->having('count(test_time)>3') ->select(); ~~~ # join ~~~ join ( mixed join [, mixed $condition = null [, string $type = 'INNER']] ) 等同于 JOIN(默認的JOIN類型),如果表中有至少一個匹配,則返回行 leftJoin ( mixed join [, mixed $condition = null ] ) 即使右表中沒有匹配,也從左表返回所有的行 rightJoin ( mixed join [, mixed $condition = null ] ) 即使左表中沒有匹配,也從右表返回所有的行 fullJoin ( mixed join [, mixed $condition = null ] ) 只要其中一個表中存在匹配,就返回行 ~~~ ~~~ Db::table('think_user') ->alias('a') ->join(['think_work'=>'w'],'a.id=w.artist_id') ->join(['think_card'=>'c'],'a.card_id=c.id') ->select(); ~~~ # union 用于合并兩個或多個 SELECT 語句的結果集。 ~~~ Db::field('name') ->table('think_user_0') ->union('SELECT name FROM think_user_1') ->union('SELECT name FROM think_user_2') ->select(); ~~~ 支持UNION ALL 操作,例如: ~~~ Db::field('name') ->table('think_user_0') ->unionAll('SELECT name FROM think_user_1') ->unionAll('SELECT name FROM think_user_2') ->select(); ~~~ # distinct 用于返回唯一不同的值 。 ~~~ //回`user_login`字段不同的數據 SELECT DISTINCT user_login FROM think_user Db::table('think_user')->distinct(true)->field('user_login')->select(); ~~~ # lock 用于數據庫的鎖機制,如果在查詢或者執行操作的時候使用 `Lock`方法是用于數據庫的鎖機制,如果在查詢或者執行操作的時候使用: ~~~ Db::name('user')->where('id',1)->lock(true)->find(); ~~~ 就會自動在生成的SQL語句最后加上`FOR UPDATE` (Oracle數據庫:`FOR UPDATE NOWAIT`)。加上FOR UPDATE后這條數據就會被鎖定,保證了此條數據不會被其他語句修改 lock方法支持傳入字符串用于一些特殊的鎖定要求,例如: ~~~ Db::name('user')->where('id',1)->lock('lock in share mode')->find(); ~~~ # cache `cache`方法用于查詢緩存操作,也是連貫操作方法之一。 **cache**可以用于`select`、`find`、`value`和`column`方法,以及其衍生方法,使用`cache`方法后,在緩存有效期之內不會再次進行數據庫查詢操作,而是直接獲取緩存中的數據,關于數據緩存的類型和設置可以參考緩存部分。 對find方法使用cache方法如下: ~~~ Db::table('user')->where('id',5)->cache(true)->find(); ~~~ 第一次查詢結果會被緩存,第二次查詢相同的數據的時候就會直接返回緩存中的內容,而不需要再次進行數據庫查詢操作。 默認情況下, 緩存有效期是由默認的緩存配置參數決定的,但`cache`方法可以單獨指定,例如下面:表示對查詢結果的緩存有效期60秒。 ~~~ Db::table('user')->cache(true,60)->find(); // 或者使用下面的方式 是等效的 Db::table('user')->cache(60)->find(); ~~~ cache方法可以指定緩存標識: ~~~ Db::table('user')->cache('key',60)->find(); ~~~ >[danger] 指定查詢緩存的標識可以使得查詢緩存更有效率。 這樣,在外部就可以通過`\think\Cache`類直接獲取查詢緩存的數據,例如: ~~~ $result = Db::table('user')->cache('key',60)->find(); $data = \think\facade\Cache::get('key'); ~~~ `cache`方法支持設置緩存標簽,例如: ~~~ Db::table('user')->cache('key',60,'tagName')->find(); ~~~ ### **緩存自動更新** 這里的緩存自動更新是指一旦數據更新或者刪除后會自動清理緩存(下次獲取的時候會自動重新緩存)。 當你刪除或者更新數據的時候,可以調用相同`key`的`cache`方法,會自動更新(清除)緩存,例如: ~~~ Db::table('user')->cache('user_data')->select([1,3,5]); Db::table('user')->cache('user_data')->update(['id'=>1,'name'=>'thinkphp']); Db::table('user')->cache('user_data')->select([1,3,5]); ~~~ 最后查詢的數據不會受第一條查詢緩存的影響,確保查詢和更新或者刪除使用相同的緩存標識才能自動清除緩存。 如果使用主鍵進行查詢和更新(或者刪除)的話,無需指定緩存標識會自動更新緩存 ~~~ Db::table('user')->cache(true)->find(1); Db::table('user')->cache(true)->where('id', 1)->update(['name'=>'thinkphp']); Db::table('user')->cache(true)->find(1); ~~~ # comment 用于在生成的SQL語句中添加注釋內容 ~~~ //SELECT username,score FROM think_score ORDER BY score desc LIMIT 10 /* 查詢考試前十名分數 */ Db::table('think_score')->comment('查詢考試前十名分數') ->field('username,score') ->limit(10) ->order('score desc') ->select(); ~~~ # fetchSql 用于直接返回SQL而不是執行查詢,適用于任何的CURD操作方法 ~~~ echo Db::table('user')->fetchSql(true)->find(1); //輸出;SELECT * FROM user where `id` = 1 ~~~ # force 用于數據集的強制索引操作,例如: ~~~ Db::table('user')->force('user1')->select(); ~~~ >[danger]對查詢強制使用`user1`索引,`user1`必須是數據表實際創建的索引名稱 # partition 用于`MySQL`數據庫的分區查詢,用法如下: ~~~ // 用于查詢 Db::name('log') ->partition(['p1','p2']) ->select(); // 用于寫入 Db::name('user') ->partition('p1') ->insert(['name' => 'think', 'score' => 100']); ~~~ # failException 設置查詢數據為空時是否需要拋出異常,用于`select`和`find`方法,例如: ~~~ // 數據不存在的話直接拋出異常 Db::name('blog') ->where('status',1) ->failException() ->select(); // 數據不存在返回空數組 不拋異常 Db::name('blog') ->where('status',1) ->failException(false) ->select(); ~~~ 或者可以使用更方便的查空報錯 ~~~ // 查詢多條 Db::name('blog') ->where('status', 1) ->selectOrFail(); // 查詢單條 Db::name('blog') ->where('status', 1) ->findOrFail(); ~~~ # sequence 用于`pgsql`數據庫指定自增序列名,其它數據庫不必使用,用法為: ~~~ Db::name('user') ->sequence('user_id_seq') ->insert(['name'=>'thinkphp']); ~~~ # replace `replace`方法用于設置`MySQL`數據庫`insert`方法或者`insertAll`方法寫入數據的時候是否適用`REPLACE`方式 即**他是用來判斷添加的這條語句 根據主鍵判斷是否存在。** 主鍵存在**則替換**: 主鍵不存在**則新增**: ~~~ $data = [ ['foo' => 'bar', 'bar' => 'foo'], ['foo' => 'bar1', 'bar' => 'foo1'], ['foo' => 'bar2', 'bar' => 'foo2'] ]; //此處主鍵不存在著新增 Db::name('user')->replace()->insertAll($data); ~~~ # extra 用于`CURD`查詢,例如: ~~~ Db::name('user') ->extra('IGNORE') ->insert(['name' => 'think']); Db::name('user') ->extra('DELAYED') ->insert(['name' => 'think']); Db::name('user') ->extra('SQL_BUFFER_RESULT') ->select(); ~~~ # duplicate 用于設置`DUPLICATE`查詢,用法示例: ~~~ Db::name('user') ->duplicate(['score' => 10]) ->insert(['name' => 'think']); ~~~ # procedure 用于設置當前查詢是否為存儲過程查詢,用法如下: ~~~ $resultSet = Db::procedure(true) ->query('call procedure_name'); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看