如何在Laravel 5.4中存储Eloquent模型的所有更改日志?

时间:2017-04-27 09:06:05

标签: laravel

我想将Eloquent模型中all个字段的更改存储到数据库中。

我可以使用createdupdated事件来执行此操作,但multiple外部关系存在问题(描述为单独的表)。

示例:

User
    login
    Roles -> hasMany

当我更新登录字段时,很容易将旧值和新值写入数据库,但是当我更新Roles关系时没有任何反应。

如何跟踪所有外交关系(如hasMany,hasManyThrough,ManyToMany)?

2 个答案:

答案 0 :(得分:2)

Owen-it有一个名为laravel-auditing的非常好的库,它可以轻松查询对模型所做的所有更改的查询列表,我认为它确实非常棒。使用它,值得尝试。

答案 1 :(得分:1)

没有嵌入式和简单的方法来做到这一点 Eloquent没有提供任何方法来通过设计在相关模型上实现观察者。泰勒(just one example)以这种方式拒绝了许多提案。

你唯一能做的就是创建自己的方法来做到这一点。 你有很多可能性,这里有一些是复杂的(其中一些是"脏" :-)

  • 在每个相关模型上添加createdupdated观察者
  • 覆盖save()或在您的eloquent实例上创建自己的saveAndFire()方法,并从该方法检索父级并在保存之前调用其日志方法。 (这是一点点"脏" imho)
  • 在保存对象时自己封装所有持久层并触发事件(例如,查看存储库模式)