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(){
//接参
//参数判断
//执行更新-执行删除
//业务跳转
}
评论