信息发布→ 登录 注册 退出

laravel怎么在不加载模型的情况下更新时间戳_laravel无需加载模型更新时间戳方法

发布时间:2025-11-18

点击量:
答案:可通过DB门面或Eloquent查询构造器直接更新时间戳。使用DB::table('users')->where('id', 1)->update(['updated_at' => now()])避免模型加载;同理,App\Models\User::where('id', 1)->update(['updated_at' => now()])可跳过实例化,不触发事件;若字段名为last_modified等非默认名,需手动指定正确字段名以确保更新成功。

如果您希望在 Laravel 中更新数据库记录的时间戳,但不想先从数据库中加载对应的模型实例,则可以直接使用查询构造器来完成操作,避免不必要的模型加载和内存消耗。

本文运行环境:MacBook Pro,macOS Sonoma

一、使用 DB 门面直接更新时间戳

通过 Laravel 的 DB 门面,可以构建原始的 SQL 更新语句,直接对指定记录的时间字段进行更新,而无需实例化任何 Eloquent 模型。这种方法适用于只需要修改时间戳且不涉及模型事件触发的场景。

1、引入 DB 门面,在控制器或服务代码中使用 use Illuminate\Support\Facades\DB;

2、调用 table 方法指定目标数据表名称,例如 users 表。

3、使用 where 条件定位需要更新的具体记录,如根据 id 筛选。

4、在 update 方法中显式设置 updated_at 字段为当前时间,示例:DB::table('users')->where('id', 1)->update(['updated_at' => now()]);

二、利用 Eloquent 查询构造器跳过模型加载

即使使用 Eloquent 模型类,也可以仅将其作为查询构造器的入口,而不实际加载模型实例。这种方式保留了模型关联表名的优势,同时避免了模型初始化开销。

1、调用模型的静态方法执行查询,例如 App\Models\User::class。

2、链式调用 where 方法精确匹配目标记录。

3、使用 update 方法传入包含时间戳字段的数据数组,示例:\App\Models\User::where('id', 1)->update(['updated_at' => now()]);

4、注意该方式不会触发模型的 saving、updating 等事件,也不会自动维护 created_at 字段。

三、自定义时间字段名称的处理方式

当您的数据表未使用 Laravel 默认的 created_at 和 updated_at 字段命名时,需确保手动指定正确字段名以实现准确更新。

1、确认数据库表中实际使用的时间戳字段名称,例如 last_modified。

2、在执行更新操作时,将字段名替换为实际名称,示例:DB::table('posts')->where('id', 5)->update(['last_modified' => now()]);

3、若使用模型查询构造器,同样需保持字段名一致,避免因拼写错误导致更新失败。

标签:# 数据库  # 将其  # 适用于  # 如果您  # 运行环境  # 您的  # 跳过  # 链式  # 更新时间  # 字段名  # 加载  # laravel  # table  # 事件  # class  # sql  # cos  # macos  # mac  # macbook  # app  # cad  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!