ThinkPHP5开发连载四十四之开发连载模型-更新

上一篇文章讲解“模型-新增”,本篇文章讲解“模型-更新”。

更新为对数据库原有数据的修改。

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连载为卓象程序员原创,转载请联系卓象程序员

关注卓象程序员,定期发布技术文章

下一篇讲解“模型-删除”

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180912A0HEFZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券