norotaro/enumata-recorder

自动记录所有 Enumata 状态转换

v1.0.1 2023-08-21 19:43 UTC

This package is auto-updated.

Last update: 2024-09-21 22:45:08 UTC


README

Latest Version Tests

自动记录所有 Enumata 状态转换。

描述

此包允许您自动记录具有 Enumata 的模型可能具有的所有状态日志,并根据这些日志采取相应操作。

安装

使用 Composer 安装此包

composer require norotaro/enumata-recorder

然后运行迁移

php artisan migrate

配置

在配置了使用 Enumata 的模型(参见文档)中,我们只需添加 LogTransitions 特性

use Norotaro\Enumata\Traits\HasStateMachines;
use Norotaro\EnumataRecorder\Traits\LogTransitions;

class Order extends Model
{
    use HasStateMachines, LogTransitions;

    protected $casts = [
        'status' => OrderStatus::class,
    ];
}

就是这样。现在所有转换都将自动使用在安装包时创建的 enumata_state_logs 表进行记录。

查询日志

获取转换状态的完整历史

$order->stateLogs;

// or

$order->stateLogs()->get();

stateLogs() 方法返回一个 Eloquent 关联,可以像任何 查询构建器 一样进行链式调用以进一步细化结果。您也有一些作用域可用。

$order->stateLogs()
    ->fromState(OrderStatus::Pending)
    ->toState(OrderStatus::Approved)
    ->where('created_at', '<', Carbon::yesterday())
    ->get();

作用域

fromState($state)

$order->stateLogs()->fromState(OrderStatus::Pending)->get();

toState($state)

$order->stateLogs()->toState(OrderStatus::Approved)->get();

forField($field)

如果有多个字段使用状态,则此功能很有用。

例如,拥有以下模型

use Norotaro\Enumata\Traits\HasStateMachines;
use Norotaro\EnumataRecorder\Traits\LogTransitions;

class Order extends Model
{
    use HasStateMachines, LogTransitions;

    protected $casts = [
        'status'      => OrderStatus::class,
        'fulfillment' => OrderFulfillment::class,
    ];
}

我们可以这样访问每个字段的日志

$order->stateLogs()->forField('status')->get();

$order->stateLogs()->forField('fulfillment')->get();

或者,我们可以将参数传递给 stateLogs(),并使用字段的名称,以获取相同的结果

$order->stateLogs('status')->get();

$order->stateLogs('fulfillment')->get();

测试

要运行测试套件

composer run test

灵感

此包受到了 asantibanez/laravel-eloquent-state-machines 的启发。

许可证

MIT 许可证(MIT)。请参阅 许可证文件 以获取更多信息。