环境说明

windows10
laravel 5.2
php 5.6.15
apache 2.4.17
Homestead v2.1.8

Eloquent Techniques 简介

Laravel自带的Eloquent ORM提供了一个美观、简单的与数据库打交道的ActiveRecord实现,每张数据表都对应一个与该表进行交互的“模型”,模型允许你在表中进行数据查询,以及插入、更新、删除等操作。

Database Transactions

想要在一个数据库事务中运行一连串操作,可以使用DB门面的transaction方法,如果事务闭包中抛出异常,事务将会自动回滚。如果闭包执行成功,事务将会自动提交。使用transaction方法时不需要担心手动回滚或提交。

事例

在route.php中新建一个路由:

在命令行界面新建一个控制器:

打开SubscriptionsController控制器,在控制器中新建一个方法store:

store方法中我们可以看到注入了一个闭包Billable,同时是用了DB门面的transaction方法对数据库事务进行处理。如果不存在异常,则事务自动提交。如果存在异常,事务将自动回滚。

接下来让我们来看看transaction到底是如何实现的,所以我们找到Connection.php文件,查看一下源代码:

在源码当中可以看到transaction方法当中出入了一个闭包$callback,当我们在控制器用到transaction方法的时候,会自动执行transaction方法中的$this->beginTransaction();去检查是否出现异常。如果不存在异常则事务自动提交,当存在异常的时候就会执行$this->rollBack();,调用rollBack方法自动回滚。

总结

通过上面的内容,我们可以学到在laravel中对数据库事务是如何处理的,使用的是DB门面的transaction方法,以及了解了transaction方法的工作原理。

Tagged:

发表评论

电子邮件地址不会被公开。 必填项已用*标注