自以为是:如何在 Laravel 中安全地将多条记录插入到多个表中

WBOY
发布: 2024-07-17 19:33:34
原创
536 人浏览过

Opinionated: How to safely insert multiple records to more than one table in Laravel

杀死鸟的方法有很多种。不同的人有自己独特的有效做事方式,这就是为什么我在主题中添加了 OPINIONATED,这是我将多条记录插入多个表并有效运行其他服务的方式。

例如,假设您想要运行一个服务来在注册控制器中执行这些未列出的任务:

  • 检查数据库中是否存在新用户/潜在客户。
  • 注册一个用户(当然我们必须将这条记录保存在一个表中)。
  • 将事件/活动记录在表中。
  • 将新用户的电子邮件/电话号码记录在 tokens_table 中以进行帐户验证。
  • 发送包含令牌的电子邮件,该令牌将在 10 分钟后过期。
  • 发送包含将过期的令牌的短信 10 分钟后。

这里的主要要点是,我们在控制器中运行多个服务,并且它们必须全部成功运行,这样我们就不会出现部分事务问题。

部分交易可以描述为只完成部分交易的场景,导致数据不一致.

我们如何确保我们能够避免这种情况?

我们使用 Laravel 框架中随时可用的数据库事务外观。

要运行数据库事务,我们需要让代码执行器知道这是一个数据库事务。

雷雷

然后我们创建一个 try-catch 块,这样我们就可以轻松捕获错误并执行需要的操作。 try 块将插入数据库,而 catch 块将捕获遇到的任何错误。

对于Try区块里的内容,我们会有

  1. 检查用户是否存在的服务。
雷雷
  1. 注册新用户并记录活动的服务。
雷雷
  1. 生成一个令牌,将其记录在令牌表中,并调度一个由两个侦听器VerificationEmailListener **和**VerificationSMSListener正在侦听的事件。
雷雷

然后,这个 TRY 块中最重要的部分是在所有服务成功运行并返回成功响应的情况下提交这些更改。

雷雷

如果这个try块中的所有服务都成功,数据库提交会将这些事务保存到数据库中。

现在让我们看看Catch块部分。

如果事务/服务在 TRY 块中失败,它将到达 catch 块。因此,我们将再次调用DB外观来回滚已插入数据库的每个事务,如下所示:

雷雷

DB::rollBack() 外观将在几毫秒内取消保存/回滚已插入数据库的每个事务,不会出现任何问题。

这是我如何避免数据不一致的方法,尤其是当我在 Laravel 中运行多个数据库事务时。

完整代码块:

雷雷

如果您有任何疑问,请不要犹豫,留下它。

以上是自以为是:如何在 Laravel 中安全地将多条记录插入到多个表中的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!