在我的Laravel项目中,当我雄辩的模型被改变时,我试图添加一些日志记录。当模型未被更改时,我不想记录任何内容。我只希望在将某些更改保存到数据库后进行日志记录,以确保更改是有效的(例如,如果在保存操作中出现错误,并且由于错误而无法保存更改,则日志不再有任何意义)。
我的第一反应是像这样使用->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
}
我假设这种用例必须非常常见,因此必须存在一些建议或流畅的实现,从而使上述修复变得不太理想。我的问题是,是否有一个像->isDirty()
一样漏掉的有说服力的方法,那么就意味着一个经过修改的模型,即使在模型保存到数据库之后,也会返回true。或者我的建议是我应该调查一下这种情况下的交易?
发布于 2022-08-18 13:43:47
正如拉勒维尔博士所述,您可以使用wasChanged
方法。此方法确定在当前请求周期内上次保存模型时是否更改了任何属性。如果需要,您可以传递一个属性名,以查看某个特定属性是否被更改。
这意味着对于我们需要做的问题:
$myModel->save();
if ($myModel->wasChanged()) {
// Do the logging there were changes
}
https://stackoverflow.com/questions/73318184
复制相似问题