【问题标题】:Audit belongsTo relationship in Laravel EloquentLaravel Eloquent 中的 Audit belongsTo 关系
【发布时间】:2018-08-06 20:24:17
【问题描述】:

我有一个模型“Contract”和一个模型“ContractLine”,它们处于经典的主从关系中。在 Laravel 术语中:契约线与契约有一个 belongsTo 关系。我想审核用户对其合同所做的所有更改。不仅是一般“合同”表中的更改,还有基础“合同行”中的更改/添加/删除。

我查看了 owen-it 的 laravel-auditing 和 csinghdev 的 cs-revisionable,但我不确定他们是否支持这种审计。

任何帮助表示赞赏。

【问题讨论】:

    标签: php laravel eloquent relationships audit


    【解决方案1】:

    我通过使用laravel-auditing 解决了我的问题,用合同的 id 标记了我的 ContractLine(使用 generateTags)并将方法“getAllAudits”添加到我的合同模型中。此方法连接 Contract 审计及其基础 ContractLine 审计。在我的审计演示中,我检查了每个审计的“auditable_type”字段,以区分合同审计和合同线审计。

    仍然感觉有点 hacky,原生解决方案会更好。

    【讨论】:

    • 您好,如果您将Contract和ContractLine的示例模型代码放在答案中会很有帮助。
    • 嘿,你能给出一些示例代码示例吗?谢谢
    【解决方案2】:

    我可以为Laravel Auditing发言。

    确实可以审计多个表(即 Eloquent 模型)。

    为此,您必须在ContractContractLine 模型中实现Auditable 接口。

    基本上是这样的:

    <?php
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    use OwenIt\Auditing\Contracts\Auditable;
    
    class Contract extends Model implements Auditable
    {
        use \OwenIt\Auditing\Auditable;
    
        // ...
    }
    

    ContractLine 模型应用相同的内容。

    查看documentation 的主要部分,其中解释了所有内容,包括使用软件包时的常见问题。

    【讨论】:

    • 谢谢。正如您在我自己的回答中看到的那样,我就是这样做的,但在我的 Contract 模型中添加了一个 getAllAudits 方法,以在一个大集合中检索对我的 Contract 的审计以及对其基础 ContractLines 的审计。
    • 是的,当我写完我的答案时,我看到你自己回答了。不过,我不太明白标签的使用究竟是如何解决您的问题的。那我觉得我可能误解了你原来的问题。
    • 我也有同样的问题。给定上面的例子,如果我想做 $contract->revisionTo($last_revision) 和它的所有关系,上面的例子会起作用吗,还是我需要手动做?
    • @QuetzyGarcia 此答案已过期
    猜你喜欢
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2020-02-02
    • 2019-05-26
    • 2021-04-05
    • 2020-12-24
    • 2018-03-08
    相关资源
    最近更新 更多