<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 功能強大 支持多語言、二開方便! 廣告
                模型查詢和數據庫查詢方法的區別主要在于,模型中的查詢的數據在獲取的時候會經過獲取器的處理,以及更加對象化的獲取方式。 >[danger] 模型查詢除了使用自身的查詢方法外,一樣可以使用數據庫的查詢構造器,返回的都是模型對象實例。但如果直接調用查詢對象的方法,IDE可能無法完成自動提示。 ## 獲取單個數據 獲取單個數據的方法包括: ~~~ // 取出主鍵為1的數據 $user = User::get(1); echo $user->name; // 使用查詢構造器查詢滿足條件的數據 $user = User::where('name', 'thinkphp')->find(); echo $user->name; ~~~ 模型無論使用`get`還是`find`方法查詢,返回的是都當前模型的對象實例,如果查詢數據不存在,則返回`Null`,除了獲取模型數據外,還可以使用模型的方法。 > `V5.1.5+`版本,模型增加了`getOrFail`方法用于查詢,當查詢的數據不存在的時候會拋出`ModelNotFound`異常。 `V5.1.23+`版本開始,可以使用`findOrEmpty`方法,當查詢數據不存在的話,返回空模型而不是`Null`。 ~~~ // 使用查詢構造器查詢滿足條件的數據 $user = User::where('name', 'thinkphp')->findOrEmpty(); ~~~ >[danger] 如果你是在模型內部獲取模型數據,請不要使用`$this->name`的方式來獲取數據,請使用`$this->getAttr('name')` 替代。 ## 獲取多個數據 取出多個數據: ~~~ // 根據主鍵獲取多個數據 $list = User::all('1,2,3'); // 或者使用數組 $list = User::all([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; } ~~~ >查詢構造器方式的查詢可以支持更多的連貫操作,包括排序、數量限制等。 `V5.1.21+`版本開始,可以在`all`方法之前使用Db類的查詢鏈式操作, ~~~ // 使用查詢構造器查詢 $list = User::where('status', 1)->limit(3)->order('id', 'asc')->all(); foreach($list as $key=>$user){ echo $user->name; } ~~~ ### 自定義數據集對象 模型的`all`方法或者`select`方法返回的是一個包含多個模型實例的數據集對象(默認為`\think\model\Collection`),支持在模型中單獨設置查詢數據集的返回對象的名稱,例如: ~~~ <?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'); ~~~ ### 數據分批處理 模型也可以支持對返回的數據分批處理,這在處理大量數據的時候非常有用,例如: ~~~ User::chunk(100,function($users) { foreach($users as $user){ // 處理user模型對象 } }); ~~~ ## 使用游標查詢 模型也可以使用數據庫的`cursor`方法進行游標查詢,返回生成器對象 ~~~ foreach(User::where('status', 1)->cursor() as $user){ echo $user->name; } ~~~ `user`變量是一個模型對象實例。 ## 查詢緩存 `get`方法和`all`方法的支持使用查詢緩存,可以直接在第二個參數傳入true表示開啟查詢緩存。 ~~~ $user = User::get(1,true); $list = User::all('1,2,3',true); ~~~ 如果要設置緩存標識,則必須在第三個參數傳入緩存標識。 ~~~ $user = User::get(1,'','user'); $list = User::all('1,2,3','','user_list'); ~~~ ## 主庫讀取 如果你采用分布式數據庫,如果寫入數據后立刻進行該數據的讀取,將會導致數據讀取失敗,原因是數據庫同步尚未完成。 規范的解決方案是在寫入數據后,不要馬上從從庫讀取,而應該調用`master`方法讀取主庫。 ~~~ $user = new User; $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->save(); // 從主庫讀取數據 $user->master()->get($user->id); ~~~ 或者對關鍵的邏輯啟用事務,在事務中的數據庫操作都是基于主庫的。 `V5.1.12+`版本開始,你可以在數據庫配置文件中設置 ~~~ // 主庫寫入后從主從庫讀取 'read_master' => true ~~~ 設置開啟后,一旦你的模型有寫入操作,那么該請求后續的同一個模型的讀操作都會自動從主庫讀取。 如果你只需要對某個模型生效,可以在你完成主庫寫入操作后,執行下模型類的`readMaster`方法。 ~~~ $user = new User; $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->save(); // 從主庫讀取數據 $user->readMaster(true)->get($user->id); ~~~ >[danger] 注意上述設置和方法僅對模型查詢有效,直接調用Db類查詢無效。 > ## 最佳實踐 >[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>

                              哎呀哎呀视频在线观看