reshadman/laravel-committed

此包已被弃用,不再维护。未建议替代包。

将 **committed** 事件添加到 Eloquent 默认事件回调(创建、创建中、保存、保存中...)。

1.1.0 2019-01-11 19:00 UTC

This package is auto-updated.

Last update: 2021-09-23 20:24:11 UTC


README

此项目已过时并被弃用。Laravel 现在有一些很好的功能来定义在提交后调用的订阅者事件。如果提交,还可以推送消息队列作业。因此,社区中不需要另一种方法,但如果您感兴趣,即使过度覆盖 Eloquent 的行为可能会引起问题,该概念仍然简单且可用。只需使用核心团队提供的简单实现即可。

Laravel Committed

Build Status

committed 事件添加到 Eloquent 默认事件回调(创建、创建中、保存、保存中...)。

安装

composer require reshadman/laravel-committed

此包支持 Laravel 5.5.* 和 5.6.* 。

使用

服务提供程序会自动与发现一起注册,或者您可以将以下服务提供程序添加到您的 app.php 配置文件中

<?php

return [
    // other stuff...
    'providers' => [
        // Other providers...
        \Reshadman\Committed\CommittedServiceProvider::class    
    ]  
];

将以下 UnderstandsCommit 特性包含到您的模型中

<?php

use Reshadman\Committed\UnderstandsCommit;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use UnderstandsCommit;
    
    protected static function boot()
    {
        static::committed(function (User $user) {
            
            \Log::info($user->getKey()); 
        
        });
        
        static::committedCreation(function ($user) {});
        
        static::committedUpdate(function ($user) {});
        
        static::committedDelete(function () {});
        
        parent::boot();
    }
}

注意事项

  • 支持嵌套事务。每次您回滚嵌套事务时,所有包含的回调都将被忽略并立即删除。嵌套事务内部的回调将在顶级父事务提交时触发。
  • 在回滚或异常时不会触发提交回调。
  • 如果模型的连接不在活动事务中,回调将立即触发。
  • 支持多个数据库连接,但您需要考虑,如果您在目标模型的不同连接中打开事务,目标模型的提交回调将立即触发。

为什么我们需要 Eloquent 中的 committed 事件?

有时您开始一个业务事务,然后您可能需要回滚,或者可能会抛出异常。考虑这样一个场景,当用户注册时,您会发送确认邮件,但由于意外错误,您回滚了事务,用户实际上并未创建,但她已收到确认邮件。您可以通过确保在成功提交时而不是仅 保存 时触发事件来控制此类情况。

运行测试

克隆仓库,执行 composer 安装并运行

vendor/bin/phpunit

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件