#### 創建數據對象之:setAttr方法
* * * * *
1. 作用:如果數據對象中已存在指定數據,則更新;如果不存在,則創建。
setAttr()方法也叫修改器
2. setAttr()源碼:
~~~
/**
* 修改器 設置數據對象值
* @access public
* @param string $name 屬性名
* @param mixed $value 屬性值
* @param array $data 數據
* @return $this
*/
public function setAttr($name, $value, $data = [])
{
if (is_null($value) && $this->autoWriteTimestamp && in_array($name, [$this->createTime, $this->updateTime])) {
// 自動寫入的時間戳字段
$value = $this->autoWriteTimestamp($name);
} else {
// 檢測修改器
$method = 'set' . Loader::parseName($name, 1) . 'Attr';
if (method_exists($this, $method)) {
$value = $this->$method($value, array_merge($data, $this->data));
} elseif (isset($this->type[$name])) {
// 類型轉換
$value = $this->writeTransform($value, $this->type[$name]);
}
}
// 標記字段更改
if (!isset($this->data[$name]) || ($this->data[$name] != $value && !in_array($name, $this->change))) {
$this->change[] = $name;
}
// 設置數據對象屬性
$this->data[$name] = $value;
return $this;
}
~~~
3.setAttr()范例
~~~
<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index {
public function index(){
//1.創建數據模型對象
$model = new Staff();
//2.setAttr()方法操作數據對象
//3.如屬性不存在,則創建該屬性
$model->setAttr('id',10);
$model->setAttr('name','Jack');
$model->setAttr('age',20);
//4.如屬性已存在,則更新
$model->setAttr('id',11);
$model->setAttr('name','Jackee');
$model->setAttr('age',21);
//5.查看$model對象
dump($model);
}
}
~~~
對象輸出
~~~
object(app\index\model\Staff)#5 (28) {
//這里略去與本例無關的屬性
······
["data":protected] => array(3) {
["id"] => int(11)
["name"] => string(4) "Jackee"
["age"] => int(21)
}
//這里略去與本例無關的屬性
······
}
~~~
4.總結
setAttr( )方法,實際開發中并不常用,但在Model類源碼中,卻隨處可見它的身影。該方法不僅可以創建數據對象,還可以更新數據對象。但是該方法只能一個個逐個處理數據,多個數據需要同時處理,就必須多次調用才可以實現。
* * * * *
http://www.hmoore.net/ldkt/tp5_model/236655
- 目錄
- 5.0.10環境配置
- 5.0.10控制器模型對象
- 5.0.10模型初始化
- 5.0.10定義數據對象
- 5.0.10創建數據對象data()方法
- 5.0.10創建數據對象-setAttr方法
- 5.0.10創建數據對象__set()方法
- 5.0.10查詢數據對象getData()
- 實例
- 5.0.10保存數據save()方法
- 5.0.10保存數據saveAll()
- 5.0.10更新數據save()
- 5.0.10批量更新數據saveAll()
- 5.0.10刪除數據delete()
- 5.0.10刪除數據destroy()
- 5.0.10traits詳解
- ThinkPHP 5.0 速查表
- 注釋
- 環境變量配置
- Model分層
- MVC 邏輯服務數據
- Model分層及多對多關聯的建立
- 控制器調用邏輯層
- Session
- 子域名session共享
- 系統錯誤
- 版本錯誤
- 返回錯誤
- Token令牌及身份識別
- 關聯查詢
- 安裝
- Git安裝
- Composer
- 擴展
- Composer類
- 非Composer類
- 引用第三方庫
- 自定義命令行
- 計劃任務
- 調試
- 調試模式
- 監聽SQL
- 數據庫調試
- 單元測試
- 初始化
- 控制器初始化
- 模型初始化
- 數據緩存
- 實戰
- 版本升級
- 從V5.0.17升級到V5.0.18