## 單條記錄更新:save( )方法
#### 1. 功能:更新表中滿足條件的單條記錄。
>[info] save方法每次僅能更新一條記錄,所以適用于根據主鍵更新數據。
* * * * *
#### 2. 參數與返回值
* 參數:
| 序號 | 參數 | 說明 |
| :---: | --- | --- |
| 1 | $array / 一維數組 | 帶主鍵且鍵名與表中字段名對應的一維數組 |
* 返回值:
| 序號 | 參數 | 說明 |
| :---: | --- | --- |
| 1 | $integer / 整數 | 更新成功,返回受影響記錄數量 |
| 2 | false | 更新失敗返回布爾值:假 |
* * * * *
#### 3. 實例演示
>[info] 根據主鍵更新有二種情形:
>1. 主鍵來自于表中記錄;
>2. 主鍵由用戶自己設定;
一、更新tp5_staff表中id等于1011的記錄,將姓名name更新為:朱老師,工資salary更新為5000;
>[danger] 第一種情況:主鍵來自表中記錄
* 步驟:
1. 從表中取出id=1011的記錄,來初始化模型對象,得到數據對象;
2. 對數據對象中id=1011的數據,更新以name和salary為鍵名的數組元素;
3. 將更新后的原始數據,寫到表中對應記錄中,完成更新操作。
* 關于模型Staff.php的創建,與前面是完全一樣的,此處就不再贅述啦~~
* 我們先查看一下更新前的數據:

* 控制器:Index.php
~~~
<?php
namespace app\index\controller;
//導入自定義模型類
use app\index\model\Staff;
class Index {
public function index(){
//1.從表中取出id=1011的數據
$data = Staff::get(1011);
//2.查看從表中取出的數據
echo '1. 查看從表中取出的數據:<br />';
dump($data->getData());
//3.修改數據對象中與表字段對應的原始數據:$data屬性
$data -> setAttr('name','朱老師');
$data -> setAttr('salary',5000);
//4.更新表中記錄
$affected = $data -> allowField(true) -> save();
//5.查看更新后的數據
echo '2. 查看更新后的數據:<br />';
dump($data -> getData());
//6.判斷是否成功,并給出反饋信息
if (!empty($affected)) {
echo '更新成功!';
}else{
echo '更新失敗~~';
}
}
}
~~~
>[warning] allowField( ) 限制允許更新定段列表,true:過濾非表字段。也可直接寫字段列表,如'name,age,salary'等,即僅接受這3個字段更新,其它字段忽略。
* 查看運行結果:
~~~
1. 查看從表中取出的數據:
array(7) {
["id"] => int(1011)
["name"] => string(9) "張老師"
["sex"] => int(1)
["age"] => int(49)
["salary"] => float(2800)
["dept"] => int(1)
["hiredate"] => string(10) "2005-10-20"
}
2. 查看更新后的數據:
array(7) {
["id"] => int(1011)
["name"] => string(9) "朱老師"
["sex"] => int(1)
["age"] => int(49)
["salary"] => int(5000)
["dept"] => int(1)
["hiredate"] => string(10) "2005-10-20"
}
更新成功!
~~~
>[warning] 為了演示底層實現細節,上面的代碼寫得比較冗長。現在我們來簡化代碼:
* 簡化后的控制器代碼:
~~~
<?php
namespace app\index\controller;
//導入自定義模型類
use app\index\model\Staff;
class Index {
public function index(){
//1.從表中取出id=1011的數據
$data = Staff::get(1011);
//2.更新數據對象:魔術方法實現
$data -> name = '朱老師';
$data -> salary = 5000;
//3.更新表中數據,并反饋執行結果
echo ($data -> allowField(true) -> save()) ? '更新成功!' : '更新失敗~~';
}
}
~~~
* 簡化后的代碼運行結果:
~~~
更新成功!
~~~
* 再看查詢表中數據:更新成功!

* * * * *
>[danger] 第二種情況:更新主鍵由用戶自己定義
**任務:** 更新tp5_staff表中id =1007的記錄,將姓名name更新為:'馬金蓮'。
* 更新前id =1007的數據:

* 控制器:Index.php
~~~
<?php
namespace app\index\controller;
//導入自定義模型類
use app\index\model\Staff;
class Index {
public function index(){
//設置更新條件
$where = ['id'=> 1007];
//設置更新數據
$data = [];
$data['name'] = '馬金蓮';
//執行更新操作
$affected = (new Staff) -> allowField(true) -> save($data,$where);
//反饋執行結果
echo $affected ? '更新成功!' : '更新失敗~~';
}
}
~~~
>[warning] 注意:save方法并不能自動識別更新數據對象中的更新主鍵id,必須單獨設置更新條件做為第二個參數,這與saveAll方法不同,一定要注意。
* 更新完成后,表中數據如下:

- 前言[隨時更新]
- 開發環境
- 1.Mac環境
- 2.windows環境
- 模型對象
- 1.創建模型對象
- 2.模型初始化
- 數據對象
- 1.定義數據對象
- 2.創建數據對象
- 1.data方法
- 2.setAttr方法
- 3.__set方法
- 4.查詢數據對象
- 1.getData方法
- 2.getAttr方法
- 3.__get方法
- OOP難點總結
- 1.get_class( )實例講解
- 2.get_called_class( )實例講解
- 3.__call( )實例講解
- 3.__callStatic( )實例講解
- 4.call_user_func_array函數[重點]
- 5.普通方法與靜態方法
- 6.在Model源碼中的應用
- 7.new static 延遲靜態綁定
- PHP標準化規范
- 查詢數據
- 1.獲取單條:get靜態方法
- 2.獲取單條:對象查詢
- 3.獲取多條:all靜態方法
- 4.獲取多條:對象查詢
- 5.獲取字段值:value方法
- 6.獲取列值:column方法
- 7.動態查詢:getBy字段名
- 8.助手函數:model查詢
- 9.加載器:Loader類查詢
- 10.數據庫與模型查詢對比
- 新增數據
- 1.sava方法
- 2.savaAll方法
- 3.create靜態方法
- 4.insert靜態調用
- 更新數據
- 1.單條更新:save方法
- 2.批量更新:saveAll方法
- 3.靜態更新:update方法
- 4.查詢類Query直接更新
- 5. 閉包更新
- 刪除數據
- 1.刪除當前記錄:delete
- 2.靜態條件刪除:destory
- 獲取器
- 1.模型方法:set屬性Attr
- 修改器
- 1.set屬性Attr
- 時間戳
- 1.MySQL中日期類型復習
- 2.時間戳功能詳解
- 軟刪除[重點]
- 1.traits詳解[選學內容]
- 2.SoftDelet類源碼分析
- 3. delete實例刪除
- 4.destroy條件刪除
- 5.restore恢復數據
- 類型轉換
- 1. 規則設置
- 2. 實例演示
- 查詢范圍
- 1. 基本概念
- 2.實例演示