Skip to main content

Cos’è il Query Builder

Il Query Builder di Laravel offre un’interfaccia fluida per costruire ed eseguire query sul database. Parte da DB::table() e concatena i metodi.
Internamente usa il parameter binding di PDO, quindi la protezione da SQL injection è automatica.
Il Query Builder funziona su tutti i database supportati (MySQL, MariaDB, PostgreSQL, SQLite, SQL Server). Il codice non cambia cambiando database.

Quando usare il Query Builder o Eloquent

Recupero dei dati

Tutti i record

get() restituisce Illuminate\Support\Collection. Ogni record è uno stdClass.

Un solo record

Elenchi di colonne

Elaborazione a blocchi

Se aggiorni/elimini record mentre esegui chunk, usa chunkById() per evitare disallineamenti.

Streaming (LazyCollection)

Aggregazioni

Verifica esistenza

SELECT

WHERE

Condizioni base

Raggruppamento

whereIn / whereBetween / whereNull

whereLike

whereAny / whereAll

whereNullSafeEquals

whereNullSafeEquals (e orWhereNullSafeEquals) confronta considerando due NULL come uguali. L’operatore = normale rende NULL = NULL come false; con whereNullSafeEquals invece i NULL sono uguali. Corrisponde a <=> di MySQL e IS NOT DISTINCT FROM di PostgreSQL.
Il classico where('column', null) diventa WHERE column IS NULL; whereNullSafeEquals('column', $value) funziona in modo coerente anche quando il valore associato è o non è null. Molto utile con input utente potenzialmente nullo.

JOIN

JOIN con sottoquery

Ordinamento, raggruppamento, limit

Sottoquery

Ricerca per similarità vettoriale

Per le colonne che memorizzano vettori di embedding, whereVectorSimilarTo consente di filtrare i record vicini a un vettore specifico. Le colonne vettoriali si definiscono nelle migrazioni con il tipo vector (vedi colonne vettoriali nelle migrazioni).
whereVectorSimilarTo ordina i risultati dal più simile al meno simile. Se non serve indicare una similarità minima ma si vuole solo esplicitare l’ordinamento per distanza, si può usare orderByVectorDistance. Per includere la distanza tra le colonne restituite, selectVectorDistance permette di assegnarle un alias.
Questi metodi vengono tradotti negli operatori vettoriali forniti dal database. Verifica che il database in uso supporti il tipo vector e le relative operazioni e, con PostgreSQL, assicurati di aver abilitato l’estensione pgvector.

Espressioni Raw

Le espressioni Raw vengono inserite come SQL. Passare input utente direttamente causa SQL injection. Usa sempre binding.

INSERT / UPDATE / DELETE

INSERT

UPSERT

UPDATE

DELETE

Query condizionali (when)

Debug

dd() è comodo in debug ma non usarlo in produzione. toSql() e getBindings() sono più sicuri.
Il Query Builder è più a basso livello e restituisce stdClass. Se non ti servono relazioni ed eventi dei modelli è più semplice e veloce.
Ultima modifica il 21 settembre 2026