Open
Description
- Laravel-mongodb Version: 5.2.0
- PHP Version: 8.3.17
- Database Driver & Version: 1.21.1
Description:
The transaction method of the mongodb
connection does not call the beginTransaction
method. If dispatch job with afterCommit
=true, the queue will be sent before commit
. This behavior differs from mysql
connection
Steps to reproduce
try {
DB::connection('mysql')->transaction(static function (): void {
dispatch(fn() => dump('dump from mysql dispatch'))
->onConnection('sync')
->afterCommit();
throw new \Exception('Command not executed.');
});
} catch (\Exception) {
}
try {
DB::connection('mongodb')->transaction(static function (): void {
dispatch(fn() => dump('dump from mongodb dispatch'))
->onConnection('sync')
->afterCommit();
throw new \Exception('Command not executed.');
});
} catch (\Exception) {
}
Expected behaviour
Jobs will not be completed
Actual behaviour
We get dump = dump from mongodb dispatch
Additional debug
DB::connection('mysql')->transaction(static function (): void {
$connection = DB::connection('mysql');
$transactionsManager = (fn () => $this->transactionsManager)->bindTo($connection, $connection)();
$pendingTransactions = (fn () => $this->pendingTransactions->all())->bindTo($transactionsManager, $transactionsManager)();
dump('mysql transactionLevel: ' . DB::connection('mysql')->transactionLevel());
dump('mysql pendingTransactions: ', $pendingTransactions);
});
DB::connection('mongodb')->transaction(static function (): void {
$connection = DB::connection('mongodb');
$transactionsManager = (fn () => $this->transactionsManager)->bindTo($connection, $connection)();
$pendingTransactions = (fn () => $this->pendingTransactions->all())->bindTo($transactionsManager, $transactionsManager)();
dump('mongodb transactionLevel: ' . DB::connection('mongodb')->transactionLevel());
dump('mongodb pendingTransactions: ', $pendingTransactions);
});

Metadata
Metadata
Assignees
Labels
No labels