Laravel 8 数据库事务:控制器实例唯一的事务还是连接数据库名称唯一的事务?

Laravel 8 DB transaction: is a transaction unique to the controller instance or is it unique to the connection DB name?

我对 Laravel 比较陌生,我想更多地了解以下代码在 API 控制器方法中的行为(即在 routes/api.[=32 中定义) =]).

DB::connection($dbName)->beginTransaction();

假设两个人同时访问服务器并创建两个控制器实例。现在两个实例都调用 DB::connection($dbName)->beginTransaction();) 并在提交前执行一些代码。

为了更清楚地描述情况,两个人 A 和 B 都访问同一个 Laravel 服务器,具有同一个控制器的两个实例 class。两个控制器实例都从相同的 IP 地址访问相同的数据库并执行相同的代码段,其中涉及 beginTransaction.

根据我目前的信息,可能会发生两种情况:

(1) 它们被视为两个不同的事务,像 lastInsertId 这样的东西是分开维护的。这是期望的行为,但我无法理解如何在内部识别控制器的两个不同实例。根据粗略查看 Laravel 源代码,它似乎只读取了特定数据库连接的配置文件,这对于控制器的两个实例都是相同的。

(2) 它们被视为同一笔交易,这不是所希望的行为。我将不得不想办法让它像 (1)

中描述的那样工作

目前我没有足够的环境来准确测试并发控制器实例的行为,所以我不得不在这里问这个问题。

我已阅读 https://laravel.com/docs/8.x/database#database-transactions 但它没有告诉我们它是 (1) 或 (2) 中的哪一个。

第一种情况

交易甚至不是 Laravel 的一部分 - 它们是 SQL 的一部分。 Laravel 只调用 SQL.

同样在 PHP 中,每个请求都通过生成一个新的脚本实例来单独处理。因此两个请求之间没有变量共享。