【问题标题】:How to store log of all changes to Eloquent model in Laravel 5.4?如何在 Laravel 5.4 中存储对 Eloquent 模型的所有更改的日志?
【发布时间】:2017-09-13 03:54:48
【问题描述】:

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

我可以使用createdupdated 事件来做到这一点,但multiple 对外关系存在问题(描述为单独的表格)。

例子:

User
    login
    Roles -> hasMany

当我更新登录字段时,很容易将新旧值写入数据库,但是当我更新角色关系时,什么都没有发生。

如何跟踪所有对外关系(如 hasMany、hasManyThrough、ManyToMany)?

【问题讨论】:

  • 您想像版本控制一样存储实际更改,还是只存储字段更改的时间?

标签: laravel


【解决方案1】:

Owen-它有一个非常棒的库,名为laravel-auditing,它保留了一个易于查询的列表,列出了对模型所做的所有更改,我认为它做了一件很棒的工作。用过,值得一试。

【讨论】:

    【解决方案2】:

    没有嵌入式简单的方法可以做到这一点。
    Eloquent 没有提供任何通过设计在相关模型上实现观察者的方法。很多这样的提案都被 Taylor (just one example) 拒绝了。

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

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

    【讨论】:

      猜你喜欢
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 2018-01-24
      • 2017-11-13
      • 1970-01-01
      • 2016-08-28
      相关资源
      最近更新 更多