Skip to main content

Introduzione

Laravel supporta ufficialmente i seguenti database.
  • MySQL / MariaDB
  • PostgreSQL
  • SQLite
  • SQL Server
Puoi usare le stesse impostazioni di connessione sia con SQL grezzo, sia con Query Builder, sia con Eloquent ORM.
Questa pagina copre le premesse sulle connessioni al database. Per le query pratiche consulta Query Builder, per la gestione dello schema le Migration, per l’inserimento dei dati iniziali il Seeding.

Configurazione

La configurazione del database è concentrata in config/database.php. Con default scegli la connessione predefinita e con connections definisci i dettagli di ciascuna.
Nel .env imposta almeno quanto segue.
Se usi SQLite imposta DB_CONNECTION=sqlite e il percorso di DB_DATABASE.

Separazione delle connessioni di lettura e scrittura

Se vuoi separare letture (SELECT) e scritture (INSERT / UPDATE / DELETE) su host diversi, configura read e write all’interno della stessa connessione.
Con sticky impostato a true, le letture successive a una scrittura nella stessa richiesta vengono fissate sulla connessione di scrittura.
In configurazioni con ritardo di replica, abilitare sticky riduce il rischio di leggere dati obsoleti immediatamente dopo una scrittura.

Prevenire letture obsolete anche nelle richieste successive

sticky è valido solo all’interno della stessa richiesta. Se vuoi leggere i dati appena scritti anche nelle richieste successive della stessa sessione, aggiungi il middleware PreventStaleDatabaseReads al gruppo di middleware web.
Il middleware registra nella sessione le scritture sulla connessione al database predefinita. Per impostazione predefinita, le richieste effettuate entro 2 secondi da una scrittura usano la connessione di scrittura per le letture su quella connessione. Per modificare la durata, specifica for.
Poiché dipende dalla sessione, questo middleware deve essere eseguito dopo il middleware StartSession. Non influisce sulle letture di altre sessioni o di altre connessioni al database.

Leggere temporaneamente dalla connessione di scrittura

Per fissare le letture all’interno di una callback sulla connessione di scrittura, usa il metodo usingWritePdo della connessione.
Vale anche per le query Eloquent e delle relationship che usano la stessa connessione all’interno della callback. Al termine della callback, l’impostazione di lettura della connessione viene ripristinata, indipendentemente dal verificarsi di un’eccezione.

Connessione PostgreSQL con pool

Quando usi un servizio PostgreSQL gestito che offre connection pooling in modalità transaction (come PgBouncer), configura le opzioni pooled e direct.
Abilitando pooled, Laravel effettua automaticamente lo smistamento. Per usare esplicitamente la connessione direct nel codice applicativo, aggiungi il suffisso ::direct al nome della connessione.

Connessioni multiple al database

Puoi definire più connessioni in config/database.php e cambiarle con DB::connection().

Esecuzione di query SQL

La facade DB fornisce metodi dedicati per ciascun tipo di query.
Non concatenare input degli utenti direttamente nelle stringhe SQL. Usa sempre parametri di binding per prevenire SQL injection.

Ascolto delle query

Se vuoi tracciare l’SQL eseguito, registra DB::listen() in boot() di un Service Provider.

Transazioni

Per trattare più aggiornamenti come un’unica unità, usa DB::transaction(). Se si verifica un’eccezione, Laravel effettua automaticamente il rollback.
Se ti servono retry per deadlock, puoi specificare attempts.
Se vuoi controllare manualmente, usa beginTransaction / rollBack / commit.

Prossimi passi

Query Builder

Impara a costruire query in modo sicuro usando la configurazione della connessione.

Migrations

Impara a versionare lo schema del database a cui ti sei connesso.

Seeding

Impara a inserire dati per sviluppo e test in modo riproducibile.
Ultima modifica il 20 ottobre 2026