<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之旅 廣告
                # 更新 和模型新增一樣,更新操作同樣也會經過修改器、自動完成以及模型事件等處理,并不等同于數據庫的數據更新,而且更新方法和新增方法使用的是同一個方法,通常系統會自動判斷需要新增還是更新數據。 ## 查找并更新 在取出數據后,更改字段內容后使用`save`方法更新數據。**這種方式是最佳的更新方式**。 ``` $user = User::get(1); $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->save(); ``` > `save`方法返回影響的記錄數,并只有當`before_update`事件返回`false`的時候返回`false` 對于復雜的查詢條件,也可以使用查詢構造器來查詢數據并更新 ``` $user = User::where('status',1) ->where('name','liuchen') ->find(); $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->save(); ``` `save`方法更新數據,只會更新變化的數據,對于沒有變化的數據是不會進行重新更新的。如果你需要強制更新數據,可以使用下面的方法: ``` $user = User::get(1); $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->force()->save(); ``` 這樣無論你的修改后的數據是否和之前一樣都會強制更新該字段的值。 如果要執行SQL函數更新,那么在`V5.1.8+`版本可以使用下面的方法 ``` $user = User::get(1); $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->score = Db::raw('score+1'); $user->save(); ``` 如果只是字段的增加/減少,也可以直接用`inc/dec`方式 ``` $user = User::get(1); $user->name = 'thinkphp'; $user->email = 'thinkphp@qq.com'; $user->score = ['inc', 1]; $user->save(); ``` ## 直接更新數據 也可以直接帶更新條件來更新數據 ``` $user = new User; // save方法第二個參數為更新條件 $user->save([ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com' ],['id' => 1]); ``` 上面兩種方式更新數據,如果需要過濾非數據表字段的數據,可以使用: ``` $user = new User; // 過濾post數組中的非數據表字段數據 $user->allowField(true)->save($_POST,['id' => 1]); ``` 如果你通過外部提交賦值給模型,并且希望指定某些字段寫入,可以使用: ``` $user = new User(); // post數組中只有name和email字段會寫入 $user->allowField(['name','email'])->save($_POST, ['id' => 1]); ``` 最佳建議是在傳入模型數據之前就進行過濾,例如: ``` $user = new User(); // post數組中只有name和email字段會寫入 $data = Request::only(['name','email']); $user->save($data, ['id' => 1]); ``` ## 批量更新數據 可以使用`saveAll`方法批量更新數據,只需要在批量更新的數據中包含主鍵即可,例如: ``` $user = new User; $list = [ ['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com'], ['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq.com'] ]; $user->saveAll($list); ``` 批量更新方法返回的是一個數據集對象。 > 批量更新僅能根據主鍵值進行更新,其它情況請自行處理。 ## 靜態方法 模型支持調用數據庫的方法直接更新數據,例如: ``` User::where('id', 1) ->update(['name' => 'thinkphp']); ``` > 數據庫的`update`方法返回影響的記錄數 或者使用模型的靜態`update`方法更新: ``` User::update(['id' => 1, 'name' => 'thinkphp']); ``` > 模型的`update`方法返回模型的對象實例 > 上面兩種寫法的區別是第一種是使用的數據庫的`update`方法,而第二種是使用的模型的`update`方法(可以支持模型的修改器、事件和自動完成)。 ## 自動識別 我們已經看到,模型的新增和更新方法都是`save`方法,系統有一套默認的規則來識別當前的數據需要更新還是新增。 - 實例化模型后調用`save`方法表示新增; - 查詢數據后調用`save`方法表示更新; - `save`方法傳入更新條件后表示更新; 如果你的數據操作比較復雜,可以用`isUpdate`方法顯式的指定當前調用`save`方法是新增操作還是更新操作。 顯式更新數據: ``` // 實例化模型 $user = new User; // 顯式指定更新數據操作 $user->isUpdate(true) ->save(['id' => 1, 'name' => 'thinkphp']); ``` 顯式新增數據: ``` $user = User::get(1); $user->name = 'thinkphp'; // 顯式指定當前操作為新增操作 $user->isUpdate(false)->save(); ``` 不要在一個模型實例里面做多次更新,會導致部分重復數據不再更新,正確的方式應該是先查詢后更新或者使用模型類的`update`方法更新。 > 如果你調用`save`方法進行多次數據寫入的時候,需要注意,第二次`save`方法的時候必須使用`isUpdate(false)`,否則會視為更新數據。 ## 最佳實踐 > 更新的最佳實踐原則是:如果需要使用模型事件,那么就先查詢后更新,如果不需要使用事件,直接使用靜態的`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>

                              哎呀哎呀视频在线观看