sinclairt/track

跟踪您模型的变化以及您想跟踪的任何自定义事件

6.0.12 2017-03-29 12:27 UTC

README

composer require sinclairt/track

接下来,您需要在app/config/app.php中注册服务提供者

'Sinclair\Track\TrackServiceProvider'

最后运行php artisan vendor:publish

用法

您需要做的所有事情是在您想要跟踪的任何扩展Eloquent的模型中使用TrackTrait。

注意,如果在运行迁移和为数据库填充数据之前包含TrackTrait,则包将失败,因为表不存在,无法插入数据。

以下事件会自动跟踪:创建、更新、更新、删除和恢复(仅在模型使用SoftDeleteTrait时跟踪)。

此包可以跟踪关系表同步,但Laravel内部不会触发事件,因此您必须手动实现。此方法仅在调用sync()之后才能工作。

调用此方法后,将结果返回到trackPivotChanges()方法中,同时包括当前模型和其他完全限定的相关模型名称。

示例

$ids = [1, 2, 3, 4];

$changes = $group->addressees()->sync($ids);

$group->trackPivotChanges($changes, $group, App\Repositories\Addressee\Addressee::class);

不需要使用完全限定类名,但如果您想使用内置的展示器,则必须这样做,否则您可以创建自己的实现。

自定义日志记录

您可以通过调用以下方式在对象上记录任何内容:

{object}::log($event, $model = null, $data = [])

事件是您要记录的事件类型,这是Track包存储创建/更新/删除等事件的地方。如果没有传递,则默认为当前对象,但可以覆盖此值。$data变量包含您希望存储在跟踪中的所有附加字段,它们可以是

  • user_id 如果可用,则默认为登录用户
  • 字段
  • old_value
  • new_value
  • event 尽管这是$event变量
  • tracked_type 这将从您提供的模型中获取
  • tracked_id 如上所述

记录事件

将任何事件类添加到track配置中的events键中,Track包将记录事件,它不会将其附加到任何对象上,但可以通过Track模型直接访问。

目前有一个自定义事件示例,您可以删除它(或保留它)。

API

此包中有4个路由

  • GET /api/v1/track - 获取所有跟踪更改,这是分页的
  • POST /api/v1/track/filter - 获取一组筛选后的跟踪更改(分页)。可用的筛选器
    • tracked_type
    • tracked_id
    • user_id
    • event
    • 字段
    • old_value
    • new_value
  • GET /api/v1/track/{track} - 获取单个跟踪更改
  • POST /api/v1/track/object/ - 通过对象获取所有跟踪更改 - 这需要以下参数
    • object_id
    • object_class

API分页调用

您可以为分页调用设置以下参数

  • rows (integer) 默认 15 每页的行数
  • search (bool) 默认 true 是否在筛选期间使用搜索功能
  • orderBy (string) 默认 null 结果按哪个列排序
  • direction (asc|desc) 默认 asc 排序方向
  • pagination_name (string) 默认 page 分页集的名称
  • columns (array) 默认 ['*'] 从数据库表中返回哪些列

展示

要获取特定对象的更改,请在您的跟踪对象上调用trackedChanges()方法。

Track模型已经为您配置了视图展示器。

示例

@foreach($object->trackedChanges as $change)
	<tr>
		<td>{{ $change->present()->prettyChange() }}</td>
	</tr>
@endforeach

以下文本将被返回

  • "已更新":用户将示例字段从旧值更新为新值
  • "已附加":用户附加了一个名为Example的ExampleObject
  • "已分离":用户从ExampleObject中分离了一个名为Example的对象
  • "默认":用户{创建/删除/恢复}了一个ID为1的Example

默认情况下,演示者使用Auth User模型,但您可以在配置文件中更改此设置。

用于显示的字段名称也在此列出,其中用户名是默认值。同样,当演示者被调用并命名它正在使用的附加/分离对象时,它默认使用“name”字段名称。此配置没有设置,因为每个类的名称可能不同,在这种情况下,您可以使用演示者作为模板创建自己的,或者确保您的具有枢轴的表中有一个名称字段。