答案:可通过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、若使用模型查询构造器,同样需保持字段名一致,避免因拼写错误导致更新失败。










