我对Laravel比较陌生,我想了解更多关于API控制器方法(即在routes/api.php中定义)中的代码的行为。
DB::connection($dbName)->beginTransaction();假设两个人同时访问服务器和两个控制器实例。现在,这两个实例调用DB::connection($dbName)->beginTransaction();)并在执行之前执行一些代码。
为了更清楚地描述这种情况,A和B两个人都访问同一个Laravel服务器,具有两个相同控制器类的实例。两个控制器实例都从相同的IP地址访问相同的DB,并执行涉及beginTransaction的相同的代码段。
据我目前的资料,有两种可能发生的事情:
(1)它们被看作是两个不同的事务,并且像lastInsertId这样的东西是分开维护的。这是想要的行为,但我很难理解控制器的两个不同实例是如何在内部识别的。根据对Laravel源代码的粗略查看,它似乎只读取特定DB连接的配置文件,这对于控制器的两个实例都是相同的。
(2)它们被视为相同的事务,这不是期望的行为。我将不得不想出一种方法使它像(1)中所描述的那样工作。
目前,我没有足够的环境来准确地测试同步控制器实例的行为,所以我必须在这里提出这个问题。
我读过https://laravel.com/docs/8.x/database#database-transactions,但它没有告诉我们(1)或(2)是哪一个。
发布于 2021-07-19 08:28:56
这是第一个案子
事务甚至不是Laravel的一部分--它们是SQL的一部分。Laravel只调用SQL。
在PHP中,每个请求都是通过生成一个新的脚本实例来单独处理的。因此,在两个请求之间没有变量共享。
https://stackoverflow.com/questions/68435144
复制相似问题