上一篇文章讲解“模型-新增”,本篇文章讲解“模型-更新”。
更新为对数据库原有数据的修改。
1. 查找并更新
在取出数据后,更改字段内容后更新数据。
Index控制器,新建getUpdate方法
查看数据库user表ID等于2的原始数据(未执行修改操作前)
浏览器访问
执行后的数据库
2. 直接更新数据
1)也可以直接带更新条件来更新数据
Index控制器,新建zUpdate方法
浏览器访问后,查看数据库
2)过滤非数据字段
Index控制器,新建allowUpdate方法
更新即为修改,修改的步骤为“查询修改数据=》展示数据=》修改数据=》提交数据=》更新数据库”,是在原数据的基础上进行修改,这里为了方便,直接跳过展示原数据的步骤,直接设置修改后的数据。
新建allowupdate.html模板页,文件位置application/index/view/index/
浏览器预览
点击提交,查看数据库
3)写入指定字段
Index控制器,新建fieldUpdate方法
数据库未修改前,ID=2数据详情
浏览器访问
点击提交,查看数据库
只有name字段进行了修改,其他字段不变。
3. 批量更新数据
可以使用saveAll方法批量更新数据。
Index控制,新疆allUpdate方法
数据库未修改前,ID=1,ID=2数据详情
浏览器访问,查看数据库
注意:
1. 批量更新仅能根据主键值进行更新,其它情况请使用foreach遍历更新。
4. 通过数据库类更新数据
必要的时候,你也可以使用数据库对象来直接更新数据,但这样就无法使用模型的事件功能。
1)方法一
Index控制器,新建uUpdate方法
浏览器访问
查看数据库
2)方法二
Index控制器,新建uuUpdate方法
浏览器访问
查看数据库
注意:
1. 如果传入update的数据包含主键的话,可以无需使用where方法。
5. 静态方法
模型支持静态方法直接更新数据。
Index控制器,新建staticUpdate方法
浏览器访问
查看数据库
注意:
1. 或者直接使用update方法,update传入的数据包含主键的话,可以无需使用where方法,即:User::update(['id' => 2, 'name' => '静态方法更新数据']);
6. 闭包更新
可以通过闭包函数使用更复杂的更新条件。
Index控制器,新建biUpdate方法
查看数据库,id大于60的数据信息,其中cid等于3的有三个
浏览器访问
查看更新后的数据库
7. 自动识别
我们已经看到,模型的新增和更新方法都是save方法,系统有一套默认的规则来识别当前的数据需要更新还是新增。
注意:
1. 实例化模型后调用save方法表示新增;
1. 查询数据后调用save方法表示更新;
2. save方法传入更新条件后表示更新;
如果你的数据操作比较复杂,可以显式的指定当前调用save方法是新增操作还是更新操作。
Index控制,新建xianUpdate方法
浏览器访问后,查看数据库
注意:
1. 注意不要在一个模型实例里面做多次更新,会导致部分重复数据不再更新,正确的方式应该是先查询后更新或者使用模型类的update方法更新。
2. 如果你调用save方法进行多次数据写入的时候,需要注意,第二次save方法的时候必须使用isUpdate(false),否则会视为更新数据。
注意:
1. 以上测试都是在控制的方法中直接操作数据库的,说明控制器可以与数据库交互,但在实际项目中与数据库的交互程序都写在模型中。
2. 模型中的方法实现对数据库的操作,控制实例化模型,调用模型中的方法。
ThinkPHP5连载为卓象程序员原创,转载请联系卓象程序员
关注卓象程序员,定期发布技术文章
下一篇讲解“模型-删除”
领取专属 10元无门槛券
私享最新 技术干货