Skip to main content

Qu’est-ce que le Query Builder

Le query builder de Laravel construit et exécute les requêtes SQL via une interface fluent. Point de départ : DB::table(), suivi d’un chaînage de méthodes.
En interne, les paramètres sont liés via PDO, ce qui prévient automatiquement les injections SQL.
Le query builder fonctionne avec toutes les bases prises en charge par Laravel (MySQL, MariaDB, PostgreSQL, SQLite, SQL Server). Le code reste identique quand vous changez de base.

Query Builder vs Eloquent

Lecture des données

Tous les enregistrements

get() retourne une Illuminate\Support\Collection d’objets stdClass.

Un enregistrement

Liste d’une colonne

Traitement par lots

Utilisez chunkById() (pas chunk()) si vous modifiez/supprimez des enregistrements pendant l’itération, pour éviter les décalages.

Streaming (LazyCollection)

Agrégations

Existence

Clause SELECT

Clause WHERE

Conditions de base

Groupement de conditions

whereIn / whereBetween / whereNull

whereLike (pattern matching)

whereAny / whereAll

whereNullSafeEquals

whereNullSafeEquals traite NULL = NULL comme vrai (contrairement à = classique). Équivalent à <=> sous MySQL, IS NOT DISTINCT FROM sous PostgreSQL.
where('column', null) devient WHERE column IS NULL. whereNullSafeEquals reste cohérent quelle que soit la valeur bindée.

JOIN

JOIN par sous-requête

ORDER BY / GROUP BY / LIMIT

Sous-requêtes

Recherche par similarité vectorielle

Pour une colonne contenant des vecteurs d’embedding, whereVectorSimilarTo permet de ne récupérer que les enregistrements proches d’un vecteur donné. Les colonnes vectorielles se déclarent dans une migration avec le type vector (Colonnes et index vectoriels dans les migrations).
whereVectorSimilarTo trie les résultats du plus similaire au moins similaire. Si vous n’avez pas besoin de fixer une similarité minimale et souhaitez uniquement ordonner par distance, utilisez orderByVectorDistance. Pour inclure la distance dans les colonnes retournées, selectVectorDistance permet de lui donner un alias.
Ces méthodes sont converties en opérateurs vectoriels fournis par la base de données. Vérifiez que la base de données utilisée prend en charge le type vectoriel et ses opérations, et activez l’extension pgvector sur PostgreSQL.

Expressions Raw

Les expressions Raw sont insérées telles quelles dans la requête. Ne concaténez jamais l’input utilisateur : utilisez toujours les bindings.

INSERT / UPDATE / DELETE

INSERT

UPSERT

UPDATE

DELETE

Requête conditionnelle (when)

Applique une condition dynamiquement sans casser le chaînage.

Débogage

dd() est utile en dev, mais à proscrire en production. Préférez toSql() + getBindings().

Récapitulatif

Le Query Builder est plus bas niveau et retourne stdClass, non des instances de modèle. Sans besoin de relations ou d’événements (observers), il est plus simple et plus rapide.
Dernière modification le 21 septembre 2026