Skip to main content

Inleiding

Laravel 12 is uitgebracht in februari 2025. Deze gids beschrijft de stappen om te upgraden van Laravel 11.x naar 12.x.
De geschatte tijd voor de upgrade is ongeveer 5 minuten. De impact van breaking changes op je applicatie hangt echter af van de omvang en de functies die je gebruikt.

Automatisch upgraden met Laravel Shift

Je kunt de upgrade ook automatiseren met Laravel Shift. Shift werkt de dependencies en configuratiebestanden van je applicatie automatisch bij.

Wijzigingen per impactniveau

Impact: hoog

  • Dependencies bijwerken
  • De Laravel installer bijwerken

Impact: middel

  • De Eloquent HasUuids-trait en UUIDv7

Impact: laag

  • Carbon 3
  • Resultaatindex-mapping van Concurrency
  • Klasse-afhankelijkheden oplossen in de container
  • SVG uitgesloten bij afbeeldingsvalidatie
  • Standaard rootpad van de lokale filesystem-disk
  • Multi-schema database-inspectie
  • Mergen van geneste array-requests

Upgradestappen

Dependencies bijwerken

Impact: hoog Werk de volgende dependencies in composer.json bij.
Installeer daarna de dependencies met het volgende commando.

De Laravel installer bijwerken

Impact: hoog Gebruik je de Laravel installer CLI om nieuwe Laravel-applicaties aan te maken, werk hem dan bij naar een versie die Laravel 12.x en de nieuwe starter kits ondersteunt. Geïnstalleerd via composer global require:
Geïnstalleerd via php.new? Voer dan het herinstallatiecommando voor jouw besturingssysteem uit.
Gebruik je de gebundelde versie van Laravel Herd, werk Herd zelf dan bij naar de nieuwste release.

De nieuwe starter kits

Laravel 12 introduceerde nieuwe starter kits die de klassieke Breeze en Jetstream vervangen. Voer je laravel new uit, dan kun je interactief een frontendstack kiezen. Beschikbare starter kits:
  • React — Inertia 2, React 19, TypeScript, Tailwind 4, shadcn/ui
  • Vue — Inertia 2, Vue Composition API, TypeScript, Tailwind 4, shadcn-vue
  • Svelte — Inertia 2, Svelte 5, TypeScript, Tailwind 4, shadcn-svelte
  • Livewire — Livewire, Tailwind 4, Flux UI
Bij het uitvoeren van het commando word je gevraagd een starter kit te kiezen. Daarna hoef je alleen nog de dependencies te installeren en de ontwikkelserver te starten.
Upgrade je een bestaande applicatie, dan hoef je geen starter kit opnieuw op te zetten. Deze wijziging is bedoeld voor nieuwe projecten.

Breaking changes

Eloquent

De HasUuids-trait en UUIDv7

Impact: middel De HasUuids-trait geeft nu UUID v7 (geordende UUID’s) terug. Wil je het eerdere gedrag met geordende UUID v4 behouden, stap dan over op de trait HasVersion4Uuids.
Gebruikte je al de trait HasVersion7Uuids, wijzig die dan naar de trait HasUuids (die zich nu hetzelfde gedraagt).

Validatie

SVG uitgesloten bij afbeeldingsvalidatie

Impact: laag De validatieregel image staat standaard geen SVG’s meer toe. Wil je SVG’s toestaan, geef dat dan expliciet op.

Storage

Standaard rootpad van de lokale filesystem-disk

Impact: laag Als je de local-disk niet expliciet definieert in de filesystems-configuratie, is het standaard rootpad gewijzigd van storage/app naar storage/app/private. Om het eerdere gedrag te behouden, definieer je de local-disk expliciet in het configuratiebestand.

Database

Multi-schema database-inspectie

Impact: laag Schema::getTables(), Schema::getViews() en Schema::getTypes() geven nu standaard de resultaten van alle schema’s terug. Wil je alleen een specifiek schema, geef dan het argument schema mee.
Schema::getTableListing() geeft nu standaard schema-gekwalificeerde tabelnamen terug.

Wijziging van database-constructorsignaturen

Impact: zeer laag De constructors van Illuminate\Database\Schema\Blueprint en Illuminate\Database\Grammar vereisen nu een Connection-instantie als eerste argument.
Daarnaast zijn de volgende API’s verwijderd of deprecated. Haal de tabelprefix direct op via de connection.

Concurrency

Resultaatindex-mapping

Impact: laag Geef je een associatieve array door aan Concurrency::run(), dan worden de resultaten nu teruggegeven onder de bijbehorende keys.

Container

Standaardwaarden bij het oplossen van klasse-afhankelijkheden

Impact: laag De DI-container respecteert nu de standaardwaarden van klasseproperties bij het oplossen van klasse-instanties.

Requests

Mergen van geneste array-requests

Impact: laag Met $request->mergeIfMissing() kun je nu geneste arraydata mergen met dot-notatie. Voorheen werden dot-notatiekeys letterlijk als toplevel-keys aangemaakt.

Routing

Routeprioriteit

Impact: laag Het gedrag bij meerdere routes met dezelfde naam is nu uniform, met en zonder cache. Ook bij routing zonder cache krijgt nu de eerst geregistreerde route voorrang in plaats van de laatste.

Authenticatie

Wijziging van de DatabaseTokenRepository-constructor

Impact: zeer laag De constructor van Illuminate\Auth\Passwords\DatabaseTokenRepository neemt de parameter $expires nu aan in seconden in plaats van minuten.

Carbon 3

Impact: laag De ondersteuning voor Carbon 2.x is verwijderd. Alle Laravel 12-applicaties vereisen Carbon 3.x.

Samenvatting

Laravel 12 is een versie waarnaar je relatief soepel kunt upgraden. De belangrijkste aandachtspunten:

Referenties

Laatst gewijzigd op 6 september 2026