[扩展推荐]Eloquent State Machines —— 模型状态管理
Eloquent状态机是由 Andrés Santibáñez 提供的包,它简化了Eloquent模型状态的转换:
这个周末,我开始为 @laravelphp 开发一个新软件包,用于管理 Eloquent 模型的状态机。 非常的有趣并且在这个过程中学到了很多东西。
我刚刚发布了 v1.0.0 版本。感受下吧! 🎉
github.com/asantibanez/laravel-elo...
欢迎大家反馈意见。
—— 来自 Andrés Santibáñez
通过在特定状态机中定义转换逻辑来完成转换状态。这是 SalesOrder 模型中的一个示例:
// '待处理', '已通过', '已拒绝' 或者 '已处理'
$salesOrder->status;
// null, '待处理', '已完成'
$salesOrder->fulfillment;
//
// 过渡状态示例
//
$salesOrder->status()->transitionTo('approved');
$salesOrder->fulfillment()->transitionTo('completed');
// 自定义过渡状态的属性
$salesOrder->status()->transitionTo('approved', [
'comments' => 'Customer has available credit',
]);
这里有一些例子查看转换历史:
$salesOrder->status()->was('approved');
$salesOrder->status()->timesWas('approved');
$salesOrder->status()->whenWas('approved');
$salesOrder->fulfillment()->snapshowWhen('completed');
$salesOrder->status()->history()->get();
最后,这里有一个在模型中使用这个包的例子:
namespace App\Models;
use App\StateMachines\SalesOrders\StatusStateMachine;
use Asantibanez\LaravelEloquentStateMachines\Traits\HasStateMachines;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class SalesOrder extends Model
{
use HasFactory;
use HasStateMachines;
public $stateMachines = [
'status' => StatusStateMachine::class,
];
}
Andrés 有一个 例子展示了在 Laravel 中如何使用这个包。GitHub 上的源码可以学习更多关于这个包的内容,还有完整的安装说明。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。