## 最佳实践

>[info] 更新的最佳实践原则是:如果需要使用模型事件,那么就先查询后更新,如果不需要使用事件或者不查询直接更新,直接使用静态的`Update`方法进行条件更新,如非必要,尽量不要使用批量更新。

# **查找并更新:save**

在取出数据后,更改字段内容后使用`save`方法更新数据。**这种方式是最佳的更新方式**。

~~~

$user = User::find(1);

或者:

$user = User::where('status',1)

->where('name','dash')

->find();

$user->name = 'thinkphp';

$user->email = 'thinkphp@qq.com';

//成功返回true

$user->save();

//过滤: post数组中只有name和email字段会写入

$user->allowField(['name', 'email'])->save($_POST);

//save方法更新数据,只会更新变化的数据,对于没有变化的数据是不会进行重新更新的。如果你需要强制更新数据,可以使用force()

$user->force()->save();

~~~

如果要执行SQL函数更新,可以使用下面的方法

~~~

$user = User::find(1);

$user->name = 'thinkphp';

$user->email = 'thinkphp@qq.com';

$user->score= Db::raw('score+1');

$user->save();

~~~

# **批量更新数据**

可以使用`saveAll`方法批量更新数据,只需要在批量更新的数据中包含主键即可,例如:

~~~

$user = new User;

$list = [

['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com'],

['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq.com']

];

$user->saveAll($list);

~~~

批量更新方法返回的是一个数据集对象。

>[danger] 批量更新仅能根据主键值进行更新,其它情况请自行处理。

# **直接更新 :update(静态方法)**

~~~

//返回模型的对象实例

User::update(['name' => 'thinkphp'], ['id' => 1]);

~~~

# **自动识别**

我们已经看到,模型的新增和更新方法都是`save`方法,系统有一套默认的规则来识别当前的数据需要更新还是新增。

* 实例化模型后调用`save`方法表示新增;

* 查询数据后调用`save`方法表示更新;

不要在一个模型实例里面做多次更新,会导致部分重复数据不再更新,正确的方式应该是先查询后更新或者使用模型类的`update`方法更新。

>[danger] 不要调用`save`方法进行多次数据写入。

PHP文件怎么改tne,修改 · thinkphp6文档 · 看云相关推荐

  1. java robot 文档_文件配置 · simple-robot 机器人开发者使用文档 · 看云

    # 文件配置 文件配置使用properties格式文件,以上一章节中讲到的`配置名`作为**键(key)**,以配置的值作为**值(value)** > 以核心`1.12.x`的配置规范为准,较 ...

  2. php后台架构,架构 · FastAdmin - 基于ThinkPHP5的极速后台开发框架文档 · 看云

    ## 架构总览 FastAdmin基于MVC的设计模式,将我们的应用分为三层(模型M.视图V.控制器C). ## 目录结构 FastAdmin目录结构遵循ThinkPHP5官方建议的模块设计: ~~~ ...

  3. php5 数据库框架,数据库 · FastAdmin - 基于ThinkPHP5的极速后台开发框架文档 · 看云...

    这里提供的是数据库表字段规则在你创建表时使用,当按如下的规则进行字段命名.类型设置和备注时 使用`php think crud -t 表名`生成CRUD时会自动生成对应的HTML元素和组件 ## 根据 ...

  4. 微信人人商城云服务器,微信支付 · 微智人人商城使用文档 · 看云

    * #### **支付管理** 添加新模板 :-: ![](https://box.kancloud.cn/a39c011c0de721adce0ebef9b95162d4_1151x763.png) ...

  5. php项目架构图,项目架构 · Lanson技术文档 · 看云

    ### 基础项目架构 **项目基于 ThinkPHP 3.2.3 版本做为项目的基础开发框架** 1. 项目采用MVC结构,入口文件在index.php 2. 调用Common 的 BaseContr ...

  6. crmeb单商户java版安装_前端配置说明 · CRMEB 单商户Java版 帮助文档 · 看云

    # :-: 前端添加页面 ### 侧边栏菜单 sider.js 配置 侧边菜单一般较多,所以建议拆分模块,便于维护.仍然以上一篇的`dashboard`为例,创建文件`src/menu/modules ...

  7. php msf 环境要求,4.6 配置 · php-msf PHP微服务框架文档 · 看云

    # 4.6 配置 配置是框架的重要组成部分,MSF框架的配置组件采用了第三方的[hassankhan/config](https://github.com/hassankhan/config),它支持 ...

  8. 云支付登录 html,云闪付 · 迅鼎支付(免签) - 安装文档 · 看云

    > # **注意事项:** > # 1.金额浮动有串单概率!通道挂好请把手机界面留在云闪付APP里面!云闪付一定要绑定银行卡! > # 2.金额浮动有串单概率!通道挂好请把手机界面留 ...

  9. 盘企lcms php开发框架,LCMS操作 · 盘企LCMS PHP开发框架文档 · 看云

    [TOC] ### LCMS::X 错误提示页面 ``` LCMS::X($errcode, $errmsg, $go = ""); // 如果是ajax请求,不会显示错误页面,会 ...

最新文章

  1. Android 软键盘按键监控
  2. python中文编码-Python中文乱码(转)
  3. java 查询功能_java利用反射实现查询功能
  4. eclipse_中的注释_快捷键
  5. poj 1308 Is It A Tree?
  6. 数据卡片_VISA消息:关于VCPS 2.1卡片产品的性能和交叉测试的卡片个性化数据的更新...
  7. 一周第二次课(3月20日)1.6/1.7 配置IP 1.8 网络问题排查
  8. 计算机系统的组成一般不包括,建筑设备监控子系统组成一般不包括( )A.中央计算机系统B.布线系统C.DDCD.各类传感器及执 - 作业在线问答...
  9. weui 加载提示_WeUI与WeUI.JS配合切换进入页面显示加载动画
  10. Maven Build Profiles
  11. 创新创业技术路线怎么写_2016如何撰写创新创业项目申请书.ppt
  12. FeignClient中每一个@RequestParam 都要设置value,否者报错
  13. #pragma comment
  14. 洛谷P4767 [IOI2000]邮局(决策单调DP,四边形不等式优化)
  15. 腾讯视频显示网络连接服务器失败怎么办,腾讯视频不能投屏怎么回事 腾讯视频无法投屏的解决方法...
  16. 第一次创建百度脑图介绍自己,把创建过程分享一下吧,嘿嘿。
  17. 通过亚马逊云科技实现基于 Restful API 的 CloudFront Distribution 复制/克隆功能
  18. NLP 分类问题的讨论
  19. 室外管线lisp_AutoLISP语言在化工工艺室外管线设计中的应用
  20. 邓凡平WIFI学习笔记4:WiFi Simple configuration

热门文章

  1. Matlab处理气象数据(十)给地图添加边界线
  2. MySQL进阶:触发器
  3. Java语言有哪些特点?
  4. 自定义View的OnMeasure问题
  5. android 判断 音乐是否播放,Android如何判断当前手机是否正在播放音乐并获取有关正在播放的音乐的信息...
  6. 云服务器搭建全过程(阿里云、腾讯云等...通用)
  7. win10关闭windows聚焦_一劳永逸 教你彻底关闭Win10广告显示
  8. Unity的gamma矫正、颜色空间及其转换的问题
  9. 十年测试老鸟聊聊移动端兼容性测试
  10. 虚拟机启动时,提示找不到ISO映像文件