#### 创建数据对象之: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类源码中,却随处可见它的身影。该方法不仅可以创建数据对象,还可以更新数据对象。但是该方法只能一个个逐个处理数据,多个数据需要同时处理,就必须多次调用才可以实现。
* * * * *
https://www.kancloud.cn/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