tp5-CURD之更新2

CURD更新2讲

实现方法

1.Db类

Db::table('user')
    ->where('id',1)
    ->update([
        'name'=>'topThink',
        'email'=>'topThink@qq.com'
    ]);

2.模型动态

$user=User::get(1);
$user->name='topThink';
$user->email='topThink@qq.com';
$user->save();

或者

$user=User::get(1);
$user->save([
    'name'=>'topThink',
    'email'=>'topThink@qq.com'
]);

3.模型静态调用

User::update([
    'name'  => 'topthink',
    'email' => 'topthink@qq.com',
], ['id' => 1]);

区别

save方法返回影响的记录数

update方法返回的是模型的对象实例

模型和Db更新方法的区别是模型的更新只会更新有变化的数据,

没有变化的数据是不会更新到数据库的,如果所有数据都没有变化,

不会执行数据库更新操作。

强制更新

强制本次操作为更新与创建区分开

//更新数据
$this->isUpdate(true)->allowField(true)->save($data);
//创建数据
$this->isUpdate(false)->allowField(true)->save($data);

更新条件

1.默认主键更新

//获取主键名
$this->getPk();
//$data函数必须含有主键字段
$this->isUpdate(true)->allowField(true)->save($data);

2.where条件更新

//$data数组中不能含有主键字段
$where=[
'id'=>['>',676]
]
$this->isUpdate(true)->allowField(true)->save($data,$where);

注意:按着where条件更新时,要注意$data数组中不能含有主键字段,

否则主键和where条件同时存在时,默认主键更新作为条件而where条件失效。

3.主键和where同存判断

$pk=$this->getPk();
if(empty($data[$pk]) && empty($where)){
    $this->error="更新条件不能为空";
    return false;
}
return $this->isUpdate(true)->allowField(true)->save($data,$where);

如果主键存在,自动覆盖更新条件

如果主键不存在,自动使用更新条件进行更新

如果都不存在,提示错误

4.数据无变化判断

//控制器
$userObj=new Users();
$result=$userObj->edit($data,[]);

if(false===$result){
   $this->error('修改失败!原因:'.$shuxingObj->getError());
}elseif(0===$result){
   $this->error('没有修改任何数据!');
}else{
    return $this->fetch();
}

代码栗子

执行更新和删除的流程

public function edit(){
//接参
//参数判断
//执行更新-执行删除
//业务跳转
}
ThinkPHP

我来吐槽

*

*