[扩展推荐]Eloquent State Machines —— 模型状态管理

Laravel

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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/eloquent-state-...

译文地址:https://learnku.com/laravel/t/53005

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!