
本文旨在阐述在 Laravel 框架中,如何在保存模型数据时避免自动更新 `updated_at` 时间戳。通过对比两种不同的实现方式,详细解释其背后的原理,并提供正确的解决方案,帮助开发者有效控制模型的时间戳更新行为。
在 Laravel 开发中,模型的时间戳(created_at 和 updated_at)默认情况下会自动维护,这在很多场景下非常方便。然而,有时我们可能需要更新模型的某些属性,但不希望修改 updated_at 字段。本文将探讨如何在 Laravel 中实现这一目标,并深入解析两种不同方法的差异。
理解 Laravel 模型保存机制
Laravel 的 Eloquent ORM 提供了 save() 方法来保存模型数据。 当调用 save() 方法时,框架会检查模型的 $timestamps 属性。如果该属性为 true (默认值),则 updated_at 字段会被自动更新为当前时间。
两种尝试及其差异
以下是两种常见的尝试禁止更新时间戳的方法,但其中一种并不奏效:
方法 1 (无效)
$manual_ticket->status = "Queued"; $manual_ticket->initiator_id = null; $manual_ticket->save(['timestamps' => false]);
方法 2 (有效)
$manual_ticket->status = "Queued"; $manual_ticket->initiator_id = null; $manual_ticket->timestamps = false; $manual_ticket->save();
为什么方法 1 无效?
方法 1 试图将 ['timestamps' => false] 作为参数传递给 save() 方法。然而,查看 Laravel 框架的源码可以发现,save() 方法在内部会调用 finishSave() 方法。finishSave() 方法只会接受 touch 作为数组的键名,并不会识别或处理 timestamps 键。因此,传递 ['timestamps' => false] 参数实际上没有任何效果,updated_at 仍然会被更新。
方法 2 的正确实现
方法 2 的正确做法是直接修改模型的 $timestamps 属性:
$manual_ticket->timestamps = false;
将 $timestamps 设置为 false 会告诉 Eloquent ORM 在保存模型时不要自动更新时间戳。之后,调用 save() 方法即可在不更新 updated_at 的情况下保存模型的其他属性。
示例代码
假设我们有一个 Article 模型,我们想更新文章的 title 和 content,但不更新 updated_at:
$article = Article::find(1); $article->title = 'New Title'; $article->content = 'New Content'; $article->timestamps = false; // 禁用时间戳更新 $article->save(); echo "Article updated without updating timestamps.";
其他方法:saveQuietly()
除了禁用时间戳更新,Laravel 还提供了 saveQuietly() 方法。 该方法不仅可以保存模型而不更新时间戳,而且还能阻止触发任何模型事件 (例如 updating, updated, creating, created)。
$article = Article::find(1); $article->title = 'New Title'; $article->content = 'New Content'; $article->saveQuietly(); echo "Article updated quietly without updating timestamps or triggering events.";
注意事项和总结
总之,要禁止 Laravel 模型保存时更新时间戳,正确的做法是直接修改模型的 $timestamps 属性为 false。 另外,saveQuietly() 方法提供了更高级的控制,可以同时禁止更新时间戳和触发模型事件。 了解这些方法可以帮助你更灵活地控制 Laravel 模型的数据更新行为。
以上就是Laravel 模型保存时禁止更新时间戳的正确方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号