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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                本篇給出了基本的查詢用法,更多的查詢用法可以參考后續的章節。 ## 查詢單個數據 查詢單個數據使用`find`方法: ~~~ // table方法必須指定完整的數據表名 Db::table('think_user')->where('id', 1)->find(); // 如果設置了數據表前綴(prefix)參數的話 也可以使用 Db::name('user')->where('id', 1)->find(); ~~~ >[danger] 即使滿足條件的數據有多個,`find`查詢也只會返回一條數據。你可以使用`order`排序來決定返回某一條數據。 最終生成的SQL語句可能是(本手冊中的示例如未說明均以MySql作為示例): ~~~ SELECT * FROM `think_user` WHERE `id` = 1 LIMIT 1 ~~~ > `find `方法查詢結果不存在,返回 `null`,否則返回結果數組 如果希望查詢數據不存在的時候返回空數組,可以使用 ~~~ // table方法必須指定完整的數據表名 Db::table('think_user')->where('id', 1)->findOrEmpty(); ~~~ 如果希望在沒有找到數據后拋出異常可以使用 ~~~ Db::table('think_user')->where('id', 1)->findOrFail(); ~~~ 如果沒有查找到數據,則會拋出一個 think\db\exception\DataNotFoundException 異常。 ## 查詢數據集 查詢多個數據(數據集)使用`select`方法: ~~~ $list = Db::table('think_user')->where('status', 1)->select(); foreach ($list as $user) { echo $user['name']; } ~~~ 最終生成的SQL語句可能是: ~~~ SELECT * FROM `think_user` WHERE `status` = 1 ~~~ `select` 方法查詢結果是一個數據集對象(`think\Collection`),如果需要轉換為(二維)數組可以使用 ~~~ $list = Db::table('think_user')->where('status', 1)->select()->toArray(); foreach ($list as $user) { echo $user['name']; } ~~~ 但通常這是沒有必要的,因為數據集對象的操作和數組是幾乎一致的。 如果希望在沒有查找到數據后拋出異常可以使用 ~~~ Db::table('think_user')->where('status',1)->selectOrFail(); ~~~ 如果沒有查找到數據,同樣也會拋出一個 think\db\exception\DataNotFoundException 異常。 如果設置了數據表前綴參數的話,可以使用 ~~~ Db::name('user')->where('id', 1)->find(); Db::name('user')->where('status', 1)->select(); ~~~ >[info] 如果你的數據表沒有設置表前綴的話,那么`name`和`table`方法效果一致。 示例只是使用了簡單的`where`方法,其實在`find`和`select`方法之前可以使用更多的鏈式操作(參考后面[鏈式操作](%E9%93%BE%E5%BC%8F%E6%93%8D%E4%BD%9C.md)章節)方法以完成更多的查詢條件。 ## 數據集 數據庫的`select`查詢結果默認返回數據集對象(`think\Collection`),提供了和數組無差別用法,并且另外封裝了一些額外的方法。 ~~~ // 獲取數據集 $users = Db::name('user')->select(); // 遍歷數據集 foreach($users as $user){ echo $user['name']; echo $user['id']; } ~~~ 可以直接使用數組的方式操作數據集對象,例如: ~~~ // 獲取數據集 $users = Db::name('user')->select(); // 直接操作第一個元素 $item = $users[0]; // 獲取數據集記錄數 $count = count($users); // 遍歷數據集 foreach($users as $user){ echo $user['name']; echo $user['id']; } ~~~ 需要注意的是,如果要判斷數據集是否為空,不能直接使用`empty`判斷,而必須使用數據集對象的`isEmpty`方法判斷,例如: ~~~ $users = Db::name('user')->select(); if($users->isEmpty()){ echo '數據集為空'; } ~~~ `think\Collection`類包含了下列主要方法: |方法|描述| |---|---| |isEmpty|是否為空| |toArray|轉換為數組| |all|所有數據| |merge|合并其它數據| |diff|比較數組,返回差集| |flip|交換數據中的鍵和值| |intersect|比較數組,返回交集| |keys|返回數據中的所有鍵名| |first|返回第一個元素| |last|返回最后一個元素| |pop|刪除數據中的最后一個元素| |shift|刪除數據中的第一個元素| |unshift|在數據開頭插入一個元素| |push|在結尾插入一個元素| |reduce|通過使用用戶自定義函數,以字符串返回數組| |reverse|數據倒序重排| |chunk|數據分隔為多個數據塊| |each|給數據的每個元素執行回調| |filter|用回調函數過濾數據中的元素| |column|返回數據中的指定列| |sort|對數據排序| |order|指定字段排序| |shuffle|將數據打亂| |slice|截取數據中的一部分| |map|用回調函數處理數組中的元素| |where|根據字段條件過濾數組中的元素| |whereLike|Like查詢過濾元素| |whereNotLike|Not Like過濾元素| |whereIn|IN查詢過濾數組中的元素| |whereNotIn|Not IN查詢過濾數組中的元素| |whereBetween|Between查詢過濾數組中的元素| |whereNotBetween|Not Between查詢過濾數組中的元素| ## 值和列查詢 查詢某個字段的值可以用 ~~~ // 返回某個字段的值 Db::table('think_user')->where('id', 1)->value('name'); ~~~ > `value`方法查詢結果不存在,返回 null 查詢某一列的值可以用 ~~~ // 返回數組 Db::table('think_user')->where('status',1)->column('name'); // 指定id字段的值作為索引 Db::table('think_user')->where('status',1)->column('name', 'id'); ~~~ 如果要返回完整數據,并且添加一個索引值的話,可以使用 ~~~ // 指定id字段的值作為索引 返回所有數據 Db::table('think_user')->where('status',1)->column('*','id'); ~~~ > `column `方法查詢結果不存在,返回空數組 ## 數據分批處理 如果你需要處理成千上百條數據庫記錄,可以考慮使用`chunk`方法,該方法一次獲取結果集的一小塊,然后填充每一小塊數據到要處理的閉包,該方法在編寫處理大量數據庫記錄的時候非常有用。 比如,我們可以全部用戶表數據進行分批處理,每次處理 100 個用戶記錄: ~~~ Db::table('think_user')->chunk(100, function($users) { foreach ($users as $user) { // 對100條用戶數據進行處理操作 } }); ~~~ 你可以通過從閉包函數中返回`false`來中止對后續數據集的處理: ~~~ Db::table('think_user')->chunk(100, function($users) { foreach ($users as $user) { // 處理結果集... if($user->status == 0){ return false; } } }); ~~~ 也支持在`chunk`方法之前調用其它的查詢方法,例如: ~~~ Db::table('think_user') ->where('score','>',80) ->chunk(100, function($users) { foreach ($users as $user) { // } }); ~~~ `chunk`方法的處理默認是根據主鍵查詢,支持指定字段,例如: ~~~ Db::table('think_user')->chunk(100, function($users) { // 處理結果集... return false; },'create_time'); ~~~ 并且支持指定處理數據的順序。 ~~~ Db::table('think_user')->chunk(100, function($users) { // 處理結果集... return false; },'create_time', 'desc'); ~~~ >[danger] `chunk`方法一般用于命令行操作批處理數據庫的數據,不適合WEB訪問處理大量數據,很容易導致超時。 ## 游標查詢 如果你需要處理大量的數據,可以使用游標查詢功能,該查詢方式利用了PHP的生成器特性,可以大幅減少大量數據查詢的內存開銷問題。 ~~~ $list = Db::name('user')->where('status', 1)->cursor(); foreach($list as $user){ echo $user['name']; } ~~~ `cursor`方法返回的是一個生成器對象,`user`變量是數據表的一條數據(數組)。
                  <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>

                              哎呀哎呀视频在线观看