norotaro / enumata-recorder
自动记录所有 Enumata 状态转换
v1.0.1
2023-08-21 19:43 UTC
Requires
- norotaro/enumata: ^1.1
Requires (Dev)
- orchestra/testbench: ^8.5
- pestphp/pest: ^2.12
README
自动记录所有 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)。请参阅 许可证文件 以获取更多信息。