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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                和模型新增一樣,更新操作同樣也會經過修改器、自動完成以及模型事件等處理,并不等同于數據庫的數據更新,而且更新方法和新增方法使用的是同一個方法,通常系統會自動判斷需要新增還是更新數據。 ## 查找并更新 在取出數據后,更改字段內容后使用`save`方法更新數據。**這種方式是最佳的更新方式**。 ~~~ $user = User::find(1); $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->save(); ~~~ > `save`方法成功返回`true`,并只有當`before_update`事件返回`false`的時候返回`false`,有錯誤則會拋出異常。 對于復雜的查詢條件,也可以使用查詢構造器來查詢數據并更新 ~~~php $user = User::where('status',1) ->where('name','liuchen') ->find(); $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->save(); ~~~ `save`方法更新數據,只會更新變化的數據,對于沒有變化的數據是不會進行重新更新的。如果你需要強制更新數據,可以使用下面的方法: ~~~ $user = User::find(1); $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->force()->save(); ~~~ 這樣無論你的修改后的數據是否和之前一樣都會強制更新該字段的值。 如果要執行SQL函數更新,可以使用下面的方法 ~~~ $user = User::find(1); $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->score = Db::raw('score+1'); $user->save(); ~~~ ## 字段過濾 默認情況下會過濾非數據表字段的數據,如果你通過外部提交賦值給模型,并且希望指定某些字段寫入,可以使用: ~~~ $user = User::find(1); // post數組中只有name和email字段會寫入 $user->allowField(['name', 'email'])->save($_POST); ~~~ 最佳用法是在傳入模型數據之前就進行過濾,例如: ~~~ $user = User::find(1); // post數組中只有name和email字段會寫入 $data = Request::only(['name','email']); $user->save($data); ~~~ ## 批量更新數據 可以使用`saveAll`方法批量更新數據,只需要在批量更新的數據中包含主鍵即可,例如: ~~~ $user = new User; $list = [ ['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com'], ['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq.com'] ]; $user->saveAll($list); ~~~ 批量更新方法返回的是一個數據集對象。 > 批量更新僅能根據主鍵值進行更新,其它情況請自行處理。 ## 直接更新(靜態方法) 使用模型的靜態`update`方法更新: ~~~ User::update(['name' => 'thinkphp'], ['id' => 1]); ~~~ > 模型的`update`方法返回模型的對象實例 如果你的第一個參數中包含主鍵數據,可以無需傳入第二個參數(更新條件) ~~~ User::update(['name' => 'thinkphp', 'id' => 1]); ~~~ 如果你需要只允許更新指定字段,可以使用 ~~~ User::update(['name' => 'thinkphp', 'email' => 'thinkphp@qq.com'], ['id' => 1], ['name']); ~~~ 上面的代碼只會更新`name`字段的數據。 ## 自動識別 我們已經看到,模型的新增和更新方法都是`save`方法,系統有一套默認的規則來識別當前的數據需要更新還是新增。 * 實例化模型后調用`save`方法表示新增; * 查詢數據后調用`save`方法表示更新; 不要在一個模型實例里面做多次更新,會導致部分重復數據不再更新,正確的方式應該是先查詢后更新或者使用模型類的`update`方法更新。 >[danger] 不要調用`save`方法進行多次數據寫入。 ## 最佳實踐 >[info] 更新的最佳實踐原則是:如果需要使用模型事件,那么就先查詢后更新,如果不需要使用事件或者不查詢直接更新,直接使用靜態的`Update`方法進行條件更新,如非必要,盡量不要使用批量更新。
                  <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>

                              哎呀哎呀视频在线观看