Skip to main content

Qué es el query builder

El query builder de Laravel es un mecanismo para construir y ejecutar consultas de base de datos mediante una interfaz fluida. Se parte de DB::table() y se encadenan métodos para armar la consulta.
Internamente utiliza binding de parámetros de PDO, así que la protección contra inyecciones SQL es automática.
El query builder funciona con todas las bases de datos soportadas por Laravel (MySQL, MariaDB, PostgreSQL, SQLite, SQL Server). Puedes cambiar de motor sin modificar el código.

Query builder frente a Eloquent

Obtener datos

Todos los registros

get() devuelve una Illuminate\Support\Collection. Cada registro es un stdClass de PHP.

Un solo registro

Lista de valores de una columna

Procesar grandes volúmenes por partes

Si actualizas o eliminas registros durante el chunk, usa chunkById() en lugar de chunk(). Con chunk() podrían saltarse registros.

Streaming (LazyCollection)

Agregados

Comprobar existencia de registros

Cláusula SELECT

Cláusula WHERE

Condiciones básicas

Agrupar condiciones

whereIn / whereBetween / whereNull

whereLike (coincidencia de patrón)

whereAny / whereAll (misma condición en varias columnas)

whereNullSafeEquals (igualdad NULL-safe)

whereNullSafeEquals y orWhereNullSafeEquals comparan una columna con un valor tratando dos NULL como iguales. Con el operador = normal, NULL = NULL es false; en cambio whereNullSafeEquals considera NULL igual a NULL. Se corresponde con <=> en MySQL y con IS NOT DISTINCT FROM en PostgreSQL.
where('column', null) se convierte en WHERE column IS NULL, pero whereNullSafeEquals('column', $value) se comporta de la misma manera independientemente de que el valor bindeado sea null o no. Es especialmente útil cuando el valor de entrada del usuario puede ser null.

JOIN

JOIN con subconsulta

Orden, agrupación y límites

Subconsultas

Expresiones Raw

Las expresiones Raw se insertan literalmente en la consulta. Nunca pases datos del usuario directamente: usa siempre bindings para evitar inyecciones SQL.

INSERT / UPDATE / DELETE

INSERT

UPSERT (INSERT o UPDATE)

UPDATE

DELETE

Consultas condicionales (when)

Para aplicar condiciones dinámicamente, when() mantiene el código limpio.

Depuración

dd() es útil en depuración, pero no lo uses jamás en producción. toSql() y getBindings() son opciones seguras.

Resumen

El query builder es más bajo nivel: devuelve stdClass en lugar de instancias de modelo. Cuando no necesitas relaciones ni observers, el query builder es más sencillo y rápido.
Última modificación el 13 de julio de 2026