reshadman / laravel-committed
此包已被弃用,不再维护。未建议替代包。
将 **committed** 事件添加到 Eloquent 默认事件回调(创建、创建中、保存、保存中...)。
1.1.0
2019-01-11 19:00 UTC
Requires
- php: ^7.1
- illuminate/database: ~5.5.0|~5.6.0|~5.7.0
- illuminate/support: ~5.5.0|~5.6.0|~5.7.0
Requires (Dev)
- ext-pdo_sqlite: *
- mockery/mockery: ^1.0.0
- orchestra/testbench: ~3.5.0|~3.6.0
- phpunit/phpunit: ^7.0
README
此项目已过时并被弃用。Laravel 现在有一些很好的功能来定义在提交后调用的订阅者事件。如果提交,还可以推送消息队列作业。因此,社区中不需要另一种方法,但如果您感兴趣,即使过度覆盖 Eloquent 的行为可能会引起问题,该概念仍然简单且可用。只需使用核心团队提供的简单实现即可。
Laravel Committed
将 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)。有关更多信息,请参阅 许可文件。