Skip to content

Commit 3b26f7a

Browse files
authored
Add event TransactionCommitting (#44608)
1 parent 80ba056 commit 3b26f7a

File tree

4 files changed

+26
-1
lines changed

4 files changed

+26
-1
lines changed

src/Illuminate/Database/Concerns/ManagesTransactions.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public function transaction(Closure $callback, $attempts = 1)
4343

4444
try {
4545
if ($this->transactions == 1) {
46+
$this->fireConnectionEvent('committing');
4647
$this->getPdo()->commit();
4748
}
4849

@@ -188,7 +189,8 @@ protected function handleBeginTransactionException(Throwable $e)
188189
*/
189190
public function commit()
190191
{
191-
if ($this->transactions == 1) {
192+
if ($this->transactionLevel() == 1) {
193+
$this->fireConnectionEvent('committing');
192194
$this->getPdo()->commit();
193195
}
194196

src/Illuminate/Database/Connection.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Illuminate\Database\Events\StatementPrepared;
1414
use Illuminate\Database\Events\TransactionBeginning;
1515
use Illuminate\Database\Events\TransactionCommitted;
16+
use Illuminate\Database\Events\TransactionCommitting;
1617
use Illuminate\Database\Events\TransactionRolledBack;
1718
use Illuminate\Database\Query\Builder as QueryBuilder;
1819
use Illuminate\Database\Query\Expression;
@@ -978,6 +979,7 @@ protected function fireConnectionEvent($event)
978979
return $this->events?->dispatch(match ($event) {
979980
'beganTransaction' => new TransactionBeginning($this),
980981
'committed' => new TransactionCommitted($this),
982+
'committing' => new TransactionCommitting($this),
981983
'rollingBack' => new TransactionRolledBack($this),
982984
default => null,
983985
});
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace Illuminate\Database\Events;
4+
5+
class TransactionCommitting extends ConnectionEvent
6+
{
7+
//
8+
}

tests/Database/DatabaseConnectionTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Illuminate\Database\Events\QueryExecuted;
1111
use Illuminate\Database\Events\TransactionBeginning;
1212
use Illuminate\Database\Events\TransactionCommitted;
13+
use Illuminate\Database\Events\TransactionCommitting;
1314
use Illuminate\Database\Events\TransactionRolledBack;
1415
use Illuminate\Database\MultipleColumnsSelectedException;
1516
use Illuminate\Database\Query\Builder as BaseBuilder;
@@ -247,6 +248,18 @@ public function testCommittedFiresEventsIfSet()
247248
$connection->commit();
248249
}
249250

251+
public function testCommittingFiresEventsIfSet()
252+
{
253+
$pdo = $this->createMock(DatabaseConnectionTestMockPDO::class);
254+
$connection = $this->getMockConnection(['getName', 'transactionLevel'], $pdo);
255+
$connection->expects($this->any())->method('getName')->willReturn('name');
256+
$connection->expects($this->any())->method('transactionLevel')->willReturn(1);
257+
$connection->setEventDispatcher($events = m::mock(Dispatcher::class));
258+
$events->shouldReceive('dispatch')->once()->with(m::type(TransactionCommitting::class));
259+
$events->shouldReceive('dispatch')->once()->with(m::type(TransactionCommitted::class));
260+
$connection->commit();
261+
}
262+
250263
public function testRollBackedFiresEventsIfSet()
251264
{
252265
$pdo = $this->createMock(DatabaseConnectionTestMockPDO::class);

0 commit comments

Comments
 (0)