diff --git a/src/StoredEvents/Models/EloquentStoredEventQueryBuilder.php b/src/StoredEvents/Models/EloquentStoredEventQueryBuilder.php index 3a314a68..260fb452 100644 --- a/src/StoredEvents/Models/EloquentStoredEventQueryBuilder.php +++ b/src/StoredEvents/Models/EloquentStoredEventQueryBuilder.php @@ -59,6 +59,7 @@ public function lastEvent(string ...$eventClasses): ?EloquentStoredEvent fn (self $query) => $query->whereEvent(...$eventClasses) ) ->orderByDesc('created_at') + ->orderByDesc('id') ->first(); } } diff --git a/tests/Models/EloquentStoredEventQueryBuilderTest.php b/tests/Models/EloquentStoredEventQueryBuilderTest.php index 3a4d90f7..101f1a03 100644 --- a/tests/Models/EloquentStoredEventQueryBuilderTest.php +++ b/tests/Models/EloquentStoredEventQueryBuilderTest.php @@ -2,6 +2,7 @@ namespace Spatie\EventSourcing\Tests\Models; +use Carbon\Carbon; use Illuminate\Support\InteractsWithTime; use function PHPUnit\Framework\assertEquals; @@ -104,3 +105,17 @@ assertInstanceOf(EventWithCarbon::class, $storedEvent); assertEquals($date, $storedEvent->value); }); + +it('retrieves last event of type when two were created at the same time', function () { + Carbon::setTestNow(); + + event(new MoneyAdded(50)); + event(new MoneyAdded(10)); + + $event = EloquentStoredEvent::query()->lastEvent(MoneyAdded::class); + /** @var MoneyAdded $storedEvent */ + $storedEvent = $event->toStoredEvent()->event; + + assertInstanceOf(MoneyAdded::class, $storedEvent); + assertEquals(10, $storedEvent->amount); +});