Laravel Eloquent 中的 Audit belongsTo 关系
Posted
技术标签:
【中文标题】Laravel Eloquent 中的 Audit belongsTo 关系【英文标题】:Audit belongsTo relationship in Laravel Eloquent 【发布时间】:2018-08-06 20:24:17 【问题描述】:我有一个模型“Contract”和一个模型“ContractLine”,它们处于经典的主从关系中。在 Laravel 术语中:契约线与契约有一个 belongsTo 关系。我想审核用户对其合同所做的所有更改。不仅是一般“合同”表中的更改,还有基础“合同行”中的更改/添加/删除。
我查看了 owen-it 的 laravel-auditing 和 csinghdev 的 cs-revisionable,但我不确定他们是否支持这种审计。
任何帮助表示赞赏。
【问题讨论】:
【参考方案1】:我通过使用laravel-auditing 解决了我的问题,用合同的 id 标记了我的 ContractLine(使用 generateTags)并将方法“getAllAudits”添加到我的合同模型中。此方法连接 Contract 审计及其基础 ContractLine 审计。在我的审计演示中,我检查了每个审计的“auditable_type”字段,以区分合同审计和合同线审计。
仍然感觉有点 hacky,原生解决方案会更好。
【讨论】:
您好,如果您将Contract和ContractLine的示例模型代码放在答案中会很有帮助。 嘿,你能给出一些示例代码示例吗?谢谢【参考方案2】:我可以为Laravel Auditing发言。
确实可以审计多个表(即 Eloquent 模型)。
为此,您必须在Contract
和ContractLine
模型中实现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 此答案已过期以上是关于Laravel Eloquent 中的 Audit belongsTo 关系的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Laravel 8 Eloquent 中的嵌套关系中获取数据?