astrotomic / laravel-transaction-proxy
此包提供了一个特性和一个类,用于在数据库事务中调用方法。
0.3.0
2020-11-19 13:32 UTC
Requires
- php: ^7.4 || ^8.0
- illuminate/database: ^7.0 || ^8.0
- illuminate/support: ^7.0 || ^8.0
Requires (Dev)
- orchestra/testbench: ^5.0 || ^6.0
- phpunit/phpunit: ^9.3
README
此包提供了一个特性和一个类,用于在数据库事务中调用方法。如果您有任何正在运行数据库查询的监听器,例如删除子模型,这将很有用。
安装
您可以通过composer安装此包。
composer require astrotomic/laravel-transaction-proxy
用法
最简单的方法是使用\Astrotomic\LaravelTransactionProxy\HasTransactionCalls
特性,它添加了一个transaction()
方法。
use Astrotomic\LaravelTransactionProxy\HasTransactionalCalls; class MyClass { use HasTransactionalCalls; }
事务链式方法
您可以在不传递任何参数的情况下调用transaction()
,然后调用的方法将在事务中执行。
此示例将在事务中调用delete()
方法。如果您有任何监听器正在运行数据库查询,例如删除子模型,这将很有用。如果任何查询失败,事务将防止您出现数据损坏。
$model->transaction()->delete(); // vs use Illuminate\Support\Facades\DB; DB::transaction(fn() => $model->delete());
条件回调
如果您想,您也可以将回调传递给transaction()
方法,您将获得调用对象作为第一个参数。
$model->transaction(function(Model $model) { $model->update(); $model->child->update(); });
测试
composer test
变更日志
有关最近更改的更多信息,请参阅CHANGELOG。
贡献
有关详细信息,请参阅CONTRIBUTING。您可能还对行为准则感兴趣。
安全
如果您发现任何安全相关的问题,请参阅SECURITY以获取报告步骤。
鸣谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。
Treeware
您可以自由使用此包,但如果它进入了您的生产环境,我将非常感谢您为世界买一棵树。
众所周知,解决气候危机并保持我们的温度不超过1.5C的最好工具之一是种树。如果您为我的森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。
您可以在offset.earth/treeware购买树木。
有关Treeware的更多信息,请参阅treeware.earth。