静态更新数据:update( )方法
1. 源码:/thinkphp/library/think/Model.php;/**
* 更新数据
* @access public
* @param array $data 数据数组
* @param array $where 更新条件
* @return $this
*/public static function update($data = [], $where = []){$model = new static();$result = $model->isUpdate(true)->save($data, $where);return $model;
}
源码分析:update()是模型类的静态方法,可用类直接调用,不必实例化;
$model = new sattic( );实例化调用这个静态方法的类,实际上就是子类,如Staff.php;
$result = $model->isUpdate(true)->save($data, $where);可见,底层仍是用save方法完成更新操作;
return $model; :注意返回值是模型对象本身,并不是save方法返回的受影响记录数量。【小提示】:模型CURD静态方法,例如:get(),all(),create(),update()等,都是返回模型对象/(数据对象)本身!
2. 参数与返回值:参数序号参数说明1$data更新数据
2$where更新条件返回值:数据对象。
3. 实例演示
一、 将tp5_staff表中,id=1007的name更新为:'马金莲';这个任务很简单,控制器:Index.php<?phpnamespace app\index\controller;//导入自定义模型类use app\index\model\Staff;class Index { public function index(){//1.设置更新数据 $data['id'] = 1007; //更新条件自动识别$data['name'] = '马金莲';//2.静态调用update()执行更新操作$model = Staff::update($data);//3.查看返回值:数据对象dump($model);
}
}我们知道这个方法还有第二个参数:更新条件$where,我们现在改写一个控制器Index.php,将更新条件单独给出:<?phpnamespace app\index\controller;//导入自定义模型类use app\index\model\Staff;class Index { public function index(){//1.设置更新数据 $data['name'] = '马金莲';//2.设置更新条件$where['id'] = 1007; //2.静态调用update()执行更新操作$model = Staff::update($data,$where);//3.查看返回值:数据对象dump($model);
}
}以上二种写法,执行结果安全相同:
4. 总结:推荐使用静态更新方法!