改进isUpdate方法

This commit is contained in:
thinkphp
2016-04-07 12:36:02 +08:00
parent f8a35a1be4
commit f162cbc44f

View File

@@ -59,6 +59,8 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
// 当前执行的关联类型 // 当前执行的关联类型
private $relation; private $relation;
// 是否为更新
protected $isUpdate = null;
/** /**
* 架构函数 * 架构函数
@@ -67,7 +69,11 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
*/ */
public function __construct($data = []) public function __construct($data = [])
{ {
$this->data = $data; if (empty($data)) {
$this->isUpdate = false;
} else {
$this->data = $data;
}
$this->name = basename(str_replace('\\', '/', get_class($this))); $this->name = basename(str_replace('\\', '/', get_class($this)));
} }
@@ -112,6 +118,8 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
throw new Exception('data type invalid', 10300); throw new Exception('data type invalid', 10300);
} }
$this->data = $data; $this->data = $data;
// 标记为新增数据
$this->isUpdate = false;
return $this; return $this;
} }
@@ -245,6 +253,8 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
public function save($data = [], $where = []) public function save($data = [], $where = [])
{ {
if (!empty($data)) { if (!empty($data)) {
// 标记为更新数据
$this->isUpdate = true;
foreach ($data as $key => $value) { foreach ($data as $key => $value) {
$this->__set($key, $value); $this->__set($key, $value);
} }
@@ -405,16 +415,26 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
} }
/** /**
* 是否为更新操作 * 是否为数据库更新操作
* @access public * @access public
* @param mixed $data 数据 * @param mixed $data 数据
* @return bool * @return bool
*/ */
public function isUpdate($data = []) public function isUpdate($data = null)
{ {
if (is_bool($data)) {
$this->isUpdate = $data;
return $this;
}
// 检测isUpdate属性
if (isset($this->isUpdate)) {
return $this->isUpdate;
}
// 根据主键判断是否更新
$data = $data ?: $this->data; $data = $data ?: $this->data;
// 判断主键 $pk = $this->pk;
$pk = $this->pk;
if (is_string($pk) && isset($data[$pk])) { if (is_string($pk) && isset($data[$pk])) {
return true; return true;
} elseif (is_array($pk)) { } elseif (is_array($pk)) {
@@ -491,12 +511,18 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
$guid = 'model_' . $name . '_' . $data; $guid = 'model_' . $name . '_' . $data;
$result = Cache::get($guid); $result = Cache::get($guid);
if ($result) { if ($result) {
return new static($result); $model = new static($result);
$model->isUpdate(true);
return $model;
} }
} }
$result = self::db()->find($data); $result = self::db()->find($data);
if ($result) {
// 标记为更新数据
$result->isUpdate(true);
}
if ($cache) { if ($cache) {
// 缓存模型数据 // 缓存模型数据
Cache::set($guid, $result->toArray()); Cache::set($guid, $result->toArray());