【发布时间】:2022-08-19 05:43:47
【问题描述】:
在我的 Laravel 项目中,当我的 Eloquent 模型发生更改时,我试图添加一些日志记录。当模型没有改变时,我不想记录任何东西。我只想在保存到数据库后记录某些内容,以确保更改有效(例如,如果在保存操作期间出现错误并且由于错误未保存更改,则日志不会生成任何意义了)。
我的第一直觉是像这样使用->isDirty():
$myModel->save();
if ($myModel->isDirty()) {
// Do the logging there were changes
}
但是,这不起作用,因为->isDirty() 方法在执行->save() 时会“重置”。就像->getDirty() 一样。
作为替代方案,我研究了$model->save() 的工作,因为这将返回一个关于它是否保存的布尔值。但是,即使没有执行查询(更改模型),它仍然会返回 true,因为从技术上讲它并没有失败。
我目前的解决方案是这样的:
$hasMyModelBeenChanged = $myModel->isDirty();
$myModel->save();
if ($hasMyModelBeenChanged) {
// Do the logging there were changes
}
我假设这个用例必须非常普遍,因此必须存在一些建议或流畅的实现,从而使上述修复不理想。我的问题是,是否存在我错过的 Eloquent 方法,就像 ->isDirty() 一样,所以表示即使模型已保存到数据库后仍返回 true 的更改模型。或者也许建议我应该在这种情况下调查交易?
-
我真的不明白当前的解决方案有什么问题?它到底有什么问题?我不明白如果没有
if-statement,你怎么能逃脱,剩下的只是一行? -
@M.Eriksson 你可能是对的,但我只是期待有一种更流畅的方式来完成这项工作。我认为一个更短更优雅的方法适合 Laravel/Eloquent 哲学。如果不存在其他方法,我会接受您的回答。
-
看看这个library