thinkphp框架中Model对象$origin对象的作用

在Model的构造函数中,$origin的初始化方式如下

if (is_object($data)) {
      $this->data = get_object_vars($data);
} else {
      $this->data = $data;
}
// 记录原始数据
$this->origin = $this->data;

$origin保存的是一个数组,因为如果保存的是对象的话,因为对象是引用,修改的时候会把$data和$origin同时修改了。

而我们需要的效果是$origin保存初始化时候的原始数据。

在thinkphp的save函数中,就可以对比$data和$origin找出修改了哪些字段,这样更新的时候就可以只更新修改过的字段

$data = array_udiff_assoc($this->data, $this->origin, function ($a, $b) {
       if ((empty($a) || empty($b)) && $a !== $b) {
              return 1;
       }
       return is_object($a) || $a != $b ? 1 : 0;
});
原文地址:https://www.cnblogs.com/eleven24/p/7135896.html