[TOC]

#### Db类实现

~~~

Db::table('user')

->where('id', 1)

->update([

'name' => 'topthink',

'email' => 'topthink@qq.com',

]);

~~~

#### 模型实现

~~~

$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',

]);

~~~

#### 查找并更新

在取出数据后,更改字段内容后更新数据。

主键匹配更新

~~~

$user = User::get(1);

$user->name = 'thinkphp';

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

$user->save();

~~~

匹配条件更新

~~~

//增加解封标记

BanModel::where('uid', $id)

->where('operation', 1)

->update(['unsealed' => 1]);

~~~

#### 直接更新数据

也可以直接带更新条件来更新数据

~~~

$user = new User;

// save方法第二个参数为更新条件

$user->save([

'name' => 'thinkphp',

'email' => 'thinkphp@qq.com'

],['id' => 1]);

~~~

上面两种方式更新数据,如果需要过滤非数据表字段的数据,可以使用:

~~~

$user = new User();

// 过滤post数组中的非数据表字段数据

$user->allowField(true)->save($_POST,['id' => 1]);

~~~

如果你通过外部请求提交参数来赋值给模型,并且希望指定某些字段写入,可以使用:

~~~

$user = new User();

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

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

~~~

#### 静态调用

~~~

User::update([

'name' => 'topthink',

'email' => 'topthink@qq.com',

], ['id' => 1]);

~~~

save方法返回影响的记录数,而update方法返回的则是模型的对象实例。

模型和Db更新方法的最大区别是模型的更新方法只会更新有变化的数据,没有变化的数据是不会更新到数据库的,如果所有数据都没变化,那么根本就不会去执行数据库的更新操作。

所以你其实会发现后面的模型更新方法其实根本没执行(因为模型的更新数据和原有数据是一样的,没任何变化,当然你有对数据作了自动操作另当别论),但你更改name或者email属性的值的话,就会发现执行了更新操作。

更新操作用法小结:

| 方法|作用|返回值|

| --- | --- | --- |

|save| 更新数据 | 影响的记录数 |

| update| 更新数据(静态) | 返回模型对象实例 |

#### 批量更新数据

可以使用saveAll方法批量更新数据,例如:

~~~

$user = new User;

$list = [

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

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

];

$user->saveAll($list);

~~~

#### 自动识别

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

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

2. 查询数据后调用save方法表示更新;

3. save方法传入更新条件后表示更新;

如果你的数据操作比较复杂,可以显式的指定当前调用save方法是新增操作还是更新操作。

php查询更新数据库数据类型,更新Update相关推荐

  1. mysql语句批量更新数据库_sql 更新批量数据库语句

    JDBC(六)批量处理sql 批量更新是分组在一起的一批更新,并以"批量"方式发送到数据库,而不是逐个发送更新. 一次发送一批更新到数据库,比一个一个发送更快,等待每个更新完成. ...

  2. 博客SQL-Server更新数据库UPDATE语法读书笔记[图]

    最近在研究博客网站,其实在很多年以前,博客是非常流行的,那时候互联网还处于发展的初级阶段,尤其是在中国地区,因此出现了国内-国外两大博客系统,分别是zblog和wordpress程序,当然了,很显然是 ...

  3. 到底是先更新数据库还是先更新缓存?

    很多小伙伴最近都在问我,在系统中引入缓存后,当向数据库中写入数据时,是先写数据库还是先写缓存呢?先写数据库和先写缓存有什么区别吗?今天,我们就一起来聊聊这个话题. 从本质上讲,无论是先写数据库还是先写 ...

  4. 高并发场景下,到底先更新缓存还是先更新数据库?

    在大型系统中,为了减少数据库压力通常会引入缓存机制,一旦引入缓存又很容易造成缓存和数据库数据不一致,导致用户看到的是旧数据. 为了减少数据不一致的情况,更新缓存和数据库的机制显得尤为重要,接下来带领大 ...

  5. 58一面:Redis数据更新,是先更新数据库还是先更新缓存?

    作者 | ^Damon 来源 | blog.csdn.net/qq_41689567/article/details/103664475 项目部分: 1.项目背景还有项目流程 2.从抓包开始到最终显示 ...

  6. 两难!先更新数据库再删缓存?还是先删缓存再更新数据库?

    前言 当我们在做数据库与缓存数据同步时,究竟更新缓存,还是删除缓存,究竟是先操作数据库,还是先操作缓存?本文带大家深度分析数据库与缓存的双写问题,并且给出了所有方案的实现代码方便大家参考. 本篇文章主 ...

  7. Redis的读更新和写更新-如何保证Redis与数据库的数据一致性

    背景 日前面试的时候被问到我们项目里面使用Redis的时候是如何更新缓存的,我的回答是写操作的时候的时候把缓存删了,然后读操作的时候就会读取出来最新的值.面试管继续问:Redis的写时更新和读时更新有 ...

  8. Redis:缓存问题之数据不一致(更新数据库时 主动更新)

    Redis:缓存问题之数据不一致(更新数据库时 主动更新) 关键词 数据源不一样(缓存和db操作非原子性) 1.延时双删 -> 2.TTL -> 3.缓存删除失败记录到日志中,利用脚本提取 ...

  9. PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)

    原文: PHP5: mysqli 插入, 查询, 更新和删除  Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...

最新文章

  1. 爬虫9-淘宝商品信息定向爬虫
  2. IOS开发笔记9-C语言基础复习
  3. 拖尾因子大怎么调整_乳房松弛下垂怎么改善?怎么快速调整乳房松弛下垂?
  4. 需要按次序点击链接的网页特效
  5. ProgressDialog 一个使用类,多多提建议
  6. mysql 执行计划_mysql执行计划
  7. 自己动手实现权限控制(数据库表的设计)
  8. (87)FPGA读文件激励(readmemb)
  9. C和汇编如何互相调用?
  10. Casper 机制的历史起源:第一篇
  11. C#实现邮件发送的功能
  12. 首周任务 :asp留言板
  13. 详解数字音频接口DAI
  14. simplelink_cc13x0_sdk中GPIO的使用
  15. 学3d游戏建模要用到什么软件?一般用哪个软件?
  16. matplotlib之pyplot模块——获取或设置坐标轴刻度及标签(xticks、yticks)
  17. Excel中如何将文本链接转成跳转链接
  18. 批量清理Unity项目Library目录 降低项目空闲占用空间
  19. 时域采样与频域采样实验报告_光时域反射仪(OTDR)如何工作(光电读书)
  20. 解决AE在mac big sur系统上安装闪退打不开问题,最新After Effects 2021 for Mac中文直装(ae 2021 mac)详细安装教程

热门文章

  1. Google Filament 源码学习(四):Material System (三) - 材质格式 (mat)
  2. select下拉选项禁用
  3. android图片上传后台后旋转的关键原因:ExifInterface
  4. install - graph-tool
  5. C++11标准模板(STL)- 算法(std::nth_element)
  6. table标签中cellspacing和cellpadding,border的意思?
  7. 06-图3. 六度空间 (30)
  8. 我跟敏捷开发的故事--三面墙
  9. 什么是Linux发行版 以及各发行版的区别
  10. 数据结构之字符串插入操作