<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之旅 廣告
                模型查詢和數據庫查詢方法的區別主要在于,模型中的查詢的數據在獲取的時候會經過獲取器的處理,以及更加對象化的獲取方式。 >[danger] 模型查詢除了使用自身的查詢方法外,一樣可以使用數據庫的查詢構造器,返回的都是模型對象實例。但如果直接調用查詢對象的方法,IDE可能無法完成自動提示。 ## 獲取單個數據 獲取單個數據的方法包括: ~~~ // 取出主鍵為1的數據 $user = User::find(1); echo $user->name; // 使用查詢構造器查詢滿足條件的數據 $user = User::where('name', 'thinkphp')->find(); echo $user->name; ~~~ 模型使用`find`方法查詢,如果數據不存在返回`Null`,否則返回當前模型的對象實例。如果希望查詢數據不存在則返回一個空模型,可以使用。 ``` $user = User::findOrEmpty(1); ``` 你可以用`isEmpty`方法來判斷當前是否為一個空模型。 ``` $user = User::where('name', 'thinkphp')->findOrEmpty(); if (!$user->isEmpty()) { echo $user->name; } ``` >[danger] 如果你是在模型內部獲取數據,請不要使用`$this->name`的方式來獲取數據,請使用`$this->getAttr('name')` 替代。 ## 獲取多個數據 取出多個數據: ~~~ // 根據主鍵獲取多個數據 $list = User::select([1,2,3]); // 對數據集進行遍歷操作 foreach($list as $key=>$user){ echo $user->name; } ~~~ 要更多的查詢支持,一樣可以使用查詢構造器: ~~~ // 使用查詢構造器查詢 $list = User::where('status', 1)->limit(3)->order('id', 'asc')->select(); foreach($list as $key=>$user){ echo $user->name; } ~~~ >查詢構造器方式的查詢可以支持更多的連貫操作,包括排序、數量限制等。 ## 模型數據集 模型的`select`查詢方法返回數據集對象 think\model\Collection,該對象繼承自 think\Collection,因此具有普通數據集的所有方法,而且還提供了額外的模型操作方法。 基本用法和數組一樣,例如可以遍歷和直接獲取某個元素。 ~~~ // 模型查詢返回數據集對象 $list = User::where('id', '>', 0)->select(); // 獲取數據集的數量 echo count($list); // 直接獲取其中的某個元素 dump($list[0]); // 遍歷數據集對象 foreach ($list as $user) { dump($user); } // 刪除某個元素 unset($list[0]); ~~~ 需要注意的是,如果要判斷數據集是否為空,不能直接使用`empty`判斷,而必須使用數據集對象的`isEmpty`方法判斷,例如: ~~~ $users = User::select(); if($users->isEmpty()){ echo '數據集為空'; } ~~~ 你可以使用模型的`hidden`/`visible`/`append`/`withAttr`方法進行數據集的輸出處理,例如: ~~~ // 模型查詢返回數據集對象 $list = User::where('id', '>', 0)->select(); // 對輸出字段進行處理 $list->hidden(['password']) ->append(['status_text']) ->withAttr('name', function($value, $data) { return strtolower($value); }); dump($list); ~~~ 如果需要對數據集的結果進行篩選,可以使用: ~~~ // 模型查詢返回數據集對象 $list = User::where('id', '>', 0)->select() ->where('name', 'think') ->where('score', '>', 80); dump($list); ~~~ 支持`whereLike`/`whereIn`/`whereBetween`等快捷方法。 ~~~ // 模型查詢返回數據集對象 $list = User::where('id', '>', 0)->select() ->whereLike('name', 'think%') ->whereBetween('score', [80,100]); dump($list); ~~~ 支持數據集的`order`排序操作。 ~~~ // 模型查詢返回數據集對象 $list = User::where('id', '>', 0)->select() ->where('name', 'think') ->where('score', '>', 80) ->order('create_time','desc'); dump($list); ~~~ 支持數據集的`diff/intersect`操作。 ~~~ // 模型查詢返回數據集對象 $list1 = User::where('status', 1)->field('id,name')->select(); $list2 = User::where('name', 'like', 'think')->field('id,name')->select(); // 計算差集 dump($list1->diff($list2)); // 計算交集 dump($list1->intersect($list2)); ~~~ 支持對數據集的數據進行批量刪除和更新操作,例如: ``` $list = User::where('status', 1)->select(); $list->update(['name' => 'php']); $list = User::where('status', 1)->select(); $list->delete(); ``` ### 自定義數據集對象 支持在模型中單獨設置查詢數據集的返回對象的名稱,例如: ~~~ <?php namespace app\index\model; use think\Model; class User extends Model { // 設置返回數據集的對象名 protected $resultSetType = '\app\common\Collection'; } ~~~ `resultSetType`屬性用于設置自定義的數據集使用的類名,該類應當繼承系統的 think\model\Collection 類。 ## 使用查詢構造器 在模型中仍然可以調用數據庫的鏈式操作和查詢方法,可以充分利用數據庫的查詢構造器的優勢。 例如: ~~~php User::where('id',10)->find(); User::where('status',1)->order('id desc')->select(); User::where('status',1)->limit(10)->select(); ~~~ 使用查詢構造器直接使用靜態方法調用即可,無需先實例化模型。 ## 獲取某個字段或者某個列的值 ~~~php // 獲取某個用戶的積分 User::where('id',10)->value('score'); // 獲取某個列的所有值 User::where('status',1)->column('name'); // 以id為索引 User::where('status',1)->column('name','id'); ~~~ >[danger] `value`和`column`方法返回的不再是一個模型對象實例,而是純粹的值或者某個列的數組。并且不支持獲取器。 ## 動態查詢 支持數據庫的動態查詢方法,例如: ~~~ // 根據name字段查詢用戶 $user = User::getByName('thinkphp'); // 根據email字段查詢用戶 $user = User::getByEmail('thinkphp@qq.com'); ~~~ ## 聚合查詢 同樣在模型中也可以調用數據庫的聚合方法查詢,例如: ~~~ User::count(); User::where('status','>',0)->count(); User::where('status',1)->avg('score'); User::max('score'); ~~~ >[danger] 如果你的字段不是數字類型,在使用`max`/`min`的時候,需要加上第二個參數,表示不強制轉化為數字。 ``` User::max('name', false); ``` ## 數據分批處理 模型也可以支持對返回的數據分批處理,這在處理大量數據的時候非常有用,例如: ~~~ User::chunk(100, function ($users) { foreach($users as $user){ // 處理user模型對象 } }); ~~~ ## 使用游標查詢 模型也可以使用數據庫的`cursor`方法進行游標查詢,返回生成器對象 ~~~ foreach(User::where('status', 1)->cursor() as $user){ echo $user->name; } ~~~ `user`變量是一個模型對象實例。 ## 最佳實踐 >[info] 模型查詢的最佳實踐原則是:在模型外部使用靜態方法進行查詢,內部使用動態方法查詢,包括使用數據庫的查詢構造器。
                  <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>

                              哎呀哎呀视频在线观看