首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

codeigniter禁用自动更新updated_at字段

CodeIgniter 是一个流行的 PHP 框架,它提供了自动更新 updated_at 字段的功能,这在处理数据库记录时非常有用。然而,有时你可能希望禁用这个功能。以下是一些基础概念以及如何实现这一目标的方法。

基础概念

  1. 自动更新字段:CodeIgniter 的 ActiveRecord 类会在执行 save() 方法时自动更新 updated_at 字段,前提是你的数据库表中存在这个字段,并且它被设置为 TIMESTAMP 类型,并且设置了默认值为 CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP
  2. 禁用自动更新:禁用自动更新意味着在执行 save() 方法时,CodeIgniter 不会自动修改 updated_at 字段的值。

如何禁用自动更新 updated_at 字段

方法一:使用 $this->db->set() 方法

你可以在调用 save() 方法之前,使用 $this->db->set() 方法来手动设置 updated_at 字段的值,或者完全忽略它。

代码语言:txt
复制
$this->db->set('updated_at', 'NOW()', FALSE); // 手动设置时间为当前时间
// 或者
$this->db->set('updated_at', NULL, FALSE); // 设置为NULL,如果数据库允许的话

$this->db->where('id', $id);
$this->db->update('your_table_name');

方法二:重写模型中的 save() 方法

如果你使用的是 CodeIgniter 的模型,你可以重写 save() 方法来禁用自动更新。

代码语言:txt
复制
class Your_model extends CI_Model {
    public function save($data, $id = NULL) {
        if ($id === NULL) {
            // 新增记录
            $this->db->insert('your_table_name', $data);
            return $this->db->insert_id();
        } else {
            // 更新记录,但不更新 updated_at 字段
            $this->db->where('id', $id);
            return $this->db->update('your_table_name', $data);
        }
    }
}

方法三:修改数据库表结构

如果你不经常需要更新 updated_at 字段,你可以修改数据库表结构,移除 ON UPDATE CURRENT_TIMESTAMP 属性。

代码语言:txt
复制
ALTER TABLE your_table_name
CHANGE COLUMN updated_at updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;

应用场景

  • 批量更新:当你需要批量更新记录时,可能不希望每次更新都修改 updated_at 字段。
  • 定时任务:在执行定时任务或脚本时,可能需要禁用自动更新以避免不必要的字段修改。
  • 特殊业务逻辑:某些业务逻辑可能要求 updated_at 字段只在特定条件下更新。

注意事项

  • 禁用自动更新后,你需要确保在其他地方正确处理 updated_at 字段的更新逻辑。
  • 修改数据库表结构可能会影响现有代码,因此在进行此类更改之前,请确保备份数据并进行充分测试。

通过上述方法,你可以灵活地控制 updated_at 字段的更新行为,以适应不同的应用需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

禁用windows自动更新

常规禁用系统更新的方法原理 1.通过系统组策略将自动更新禁止(但家庭版系统没有组策略编辑器)。 2.通过禁用windows 相关更新服务将更新禁止。...彻底禁用系统更新的方法原理 1.使用批处理的方式自动执行禁用系统更新服务,删除更新日志及偷偷下载的更新安装包,修改注册表禁止系统自动更新。...打开本地组策略成功后执行以下步骤: 计算机配置-管理模板-Windows组件-Windosw Update(更新),在右侧将“配置自动更新”和“允许自动更新立即安装”的状态改为“已禁用” gpedit.msc...”和“允许自动更新立即安装”,将状态全部改为”已禁用“。...打开本地组策略成功后执行以下步骤: 计算机配置-管理模板-Windows组件-Windosw Update(更新),在右侧将“配置自动更新”和“允许自动更新立即安装”的状态改为“已禁用” gpedit.msc

19010
  • 如何禁用WordPress自动更新功能

    WordPress 自动更新并不适合所有人,许多 WordPress 管理员对信任他们站点的自动化犹豫不决。但是,关于是否应该在 WordPress 中禁用自动更新,没有正确或错误的答案。...为什么需要禁用 WordPress 自动更新? WordPress 自动更新最严重的问题是它们可能会导致您的网站崩溃。虽然这种情况极为罕见,但应该意识到这种可能性,尤其是在进行重大更新时。...如何禁用 WordPress 自动更新功能? 要禁用自动更新,请在 wp-config.php 文件中添加以下代码片段。...//禁用 WordPress 自动更新 define( 'WP_AUTO_UPDATE_CORE', false ); 使用以上代码后 WordPress 将不会再自动安装更新。...' );//禁用主题自动更新 可以选择性的根据自己的需求使用以上两行代码,当然可能还有一些禁止 WordPress 自动更新的插件,由于子凡我本身不是很喜欢什么都用插件,所以在这里也没有办法给大家推荐插件

    1.2K20

    laravel insert 、save、update、create区别(总结二)

    1、insert:插入数据时,需要维护 created_at 和 updated_at字段, 2、save:无论插入或者更新,会自动维护,无需手动操作 //插入: public function store...created_at 和 updated_at 时间戳随着 save 方法的调用,会自动维护,无需手动操作。 save 方法也可用于模型更新。...同样地,updated_at 时间戳自动更新,无需手动操作: 3.update:更新操作,自动维护 updated_at字段 也可一并更新查询到的多个模型。...1) ->where('destination', 'San Diego') ->update(['delayed' => 1]); update 方法接受一个字段为键...、更新数据为值的数组 4.create 自动维护 created_at 和 updated_at两个字段 除了 save 和 saveMany 方法外,你还可以使用 create 方法。

    1.9K10

    上次的问题解决啦,重新送上Go ORM 单元测试全流程讲解

    从上次发文说起 在上次发布的文章《在项目里怎么给 GORM 做单元测试》中对 ORM 的 Update 操作的测试中,因为 ORM 库每次做更新操作时,都会针对updated_at字段进行自动更新,导致我们在写...not match actual [time.Time - 2022-05-08 18:13:08.234134 +0800 CST m=+0.003986334] GORM 在UPDATE 的时候会自动更新...updated_at 字段为当前时间,与这里withArgs传递的 time.Now() 参数不一致(毫秒级的差距也不行)。...这种情况可以选择在 Mock 要执行的更新 SQL 时给 updated_at字段的值设置成sqlmock.AnyArg(),就能测试通过了,上面的 UPDATE 测试改成下面这样: mock.ExpectBegin...在其注释里也有说明,尤其适合time.Time类型字段的断言。

    91240

    golang中使用gorm写入time.Time的类型时间问题

    datetime value: '0000-00-00' for column 'online_at' at row 1排查问题Model层定义在对于Tag表的定义中,可以看出我们分别定义了三个时间字段...:created_at,updated_at,online_at。...通常情况下,在数据库中updated_at字段会设置 on update: CURRENT_TIMESTAMP。也就是说,当有数据写入或者更新的时候,数据库会自动更新updated_at中的时间。...所以,我们在写业务逻辑代码的时候,就不需要去更新updated_at的值。但是,created_at 和 online_at 两个时间字段,就需要我们在业务逻辑中新增或者修改了。...解决办法方法一:定义model的时候,添加字段标签default:null在定义Tag model的时候,由于没有定义default:null,因此gorm在处理SQL的时候,就会自动使用零值来代替。

    4.2K20

    工作中遇到的一些坑(1)

    数据表默认加上gmt_modified,gmt_create,updated_at字段 一般来说,一张数据表我们会加上这样三个字段: `gmt_create` timestamp(3) NOT NULL...但是gmt_modified跟updated_at字段似乎有些重复,都保存了记录的更新时间,区别只在于一个是手动更新,一个是自动更新。可是这到底有没有必要呢?...gmt_modified表示的是字段的最后的修改时间,而updated_at表示的是程序最后一次试图修改的时间(逻辑上类似Unix系统的touch)。...此时,仅凭gmt_modified,我们无法获知哪些字段是从数据库B中获得的,这时我们就在执行同步操作的代码里手动去更新updated_at即可。...当然,如果业务比较简单,能保证不牵涉到类似的场景,也是可以把updated_at拿掉的。。。 Guava大法好 guava包里有很多便利的工具,mark下,以后慢慢用。

    40120

    跟我一起学Laravel-EloquentORM基础部分

    默认情况下,Eloquent期望表中存在created_at和updated_at两个字段,字段类型为timestamp,如果不希望这两个字段的话,设置$timestamps为false <?...$flight = new Flight; $flight->name = $request->name; $flight->save(); 在调用save方法的时候,会自动为created_at和updated_at...'Flight 10']); 更新 基本更新操作 方法save不仅可以要用来插入新的数据,也可以用来更新数据,只需先使用模型方法查询出要更新的数据,设置模型属性为新的值,然后再save就可以更新了,updated_at...字段会自动更新。...,当删除记录的时候不会真实删除记录,而是设置该字段的时间戳,由Eloquent模型屏蔽已经设置该字段的数据。

    85220

    概述-处理 HTTP 请求

    处理 HTTP 请求 为了充分地使用 CodeIgniter,你需要对 HTTP 请求和响应的工作方式有基本的了解。对于所有想要成功的开发者来说, 理解 HTTP 背后的概念是 必须 的。...本章的第一部分会给出一些关于 HTTP 的概述,接着我们会讨论怎样用 CodeIgniter 来处理 HTTP 请求与响应。 什么是 HTTP ? HTTP 是两台计算机相互通信的一种基于文本的协议。...该请求还包括许多可选的请求头字段,这些头字段可以包含各种信息,例如客户端希望内容显示为哪种语言, 客户端接受的格式类型等等。...Wikipedia 上有一篇文章,列出了 所有的请求头字段 (译者注:国内用户如果无法访问的话, 可以查看 在MDN上的页面 )。...CodeIgniter 还提供了 Response 类 ,它是 HTTP 响应的面向对象式表示。

    1.9K10

    -错误处理

    错误处理 CodeIgniter 通过 SPL collection 和一些框架内自定义异常来生成系统错误报告。...这样一来,其它异常和非监视类型子类的异常都会被传递给错误处理程序 catch (\CodeIgniter\UnknownFileException $e) { // do something...如果你希望错误处理程序正常运行,可以在 catch 语句块中再抛出一个新的异常 catch (\CodeIgniter\UnknownFileException $e) { // do...重要 如果发生错误,禁用错误报告将不会阻止日志的写入。 自定义异常 下列是可用的自定义异常: PageNotFoundException 这是用来声明 404 ,页面无法找到的错误。...UnknownClassException 当一个类没有被找到时,请使用此异常 throw new \CodeIgniter\UnknownClassException($className); 它将

    2.2K10

    使用CodeIgniter 的模型的踩坑小结

    前言 CI4中,提供了**数据建模**的能力,其中一个妙处就是在使用使用 CodeIgniter 的模型新增或者插入数据时,可以自动写入时间字段和更新时间字段。...踩坑 一、数据无法插入 在**验证规则**中不要把createdField和updatedField的字段设为 required,否则数据将无法插入。...三、使用$useTimestamps时注意 使用$useTimestamps时,假如你的数据表没有插入时间字段(createdField)或更新时间字段(updatedField),请把他们写上,例如...protected $useTimestamps = true; // 有插入时间字段,赋值为字段名称 protected $createdField = 'addTime'; // 没有更新时间字段...,赋值为null(没有插入时间字段也同理) protected $updatedField = null; 如果两个都无,就不用写这三行啦~ 总结 使用 CodeIgniter 可以节省许多开发PHP

    1.3K40
    领券