Skip to main content

Introducción

Laravel soporta oficialmente las siguientes bases de datos:
  • MySQL / MariaDB
  • PostgreSQL
  • SQLite
  • SQL Server
Puedes usar la misma configuración de conexión con SQL en crudo, Query Builder o Eloquent ORM.
Esta página cubre las bases de la conexión. Para consultas prácticas, consulta Query Builder; para gestión del esquema, Migrations; y para carga inicial de datos, Seeding.

Configuración

La configuración se concentra en config/database.php. Con default eliges el nombre de la conexión por defecto, y en connections defines los detalles de cada conexión.
Como mínimo, configura lo siguiente en .env:
Para usar SQLite, configura DB_CONNECTION=sqlite y la ruta en DB_DATABASE.

Separación de conexiones de lectura y escritura

Si quieres separar las lecturas (SELECT) y las escrituras (INSERT / UPDATE / DELETE) en hosts distintos, configura read y write dentro de la misma conexión.
Al poner sticky a true, dentro de la misma solicitud las lecturas posteriores a una escritura se fijan en la conexión de escritura.
En configuraciones con retraso de replicación, activar sticky reduce el riesgo de leer datos antiguos justo después de una escritura.

Evitar lecturas obsoletas también en las siguientes solicitudes

sticky solo tiene efecto dentro de la misma solicitud. Si quieres leer los datos recién escritos también en las solicitudes posteriores de la misma sesión, añade el middleware PreventStaleDatabaseReads al grupo de middleware web.
El middleware registra en la sesión las escrituras en la conexión de base de datos predeterminada. Por defecto, las solicitudes realizadas en los 2 segundos posteriores a una escritura usan la conexión de escritura para las lecturas de esa conexión. Para cambiar la duración, indica for.
Como este middleware depende de la sesión, debe ejecutarse después del middleware StartSession. No afecta a las lecturas de otras sesiones ni de otras conexiones de base de datos.

Leer temporalmente desde la conexión de escritura

Para fijar las lecturas dentro de un callback en la conexión de escritura, usa el método usingWritePdo de la conexión.
También se aplica a las consultas de Eloquent y de relaciones que usan la misma conexión dentro del callback. Al terminar el callback, la configuración de lectura de la conexión se restablece, se haya producido o no una excepción.

Conexión pooled a PostgreSQL

Si utilizas un servicio gestionado de PostgreSQL con pooling en modo transacción como PgBouncer, configura las opciones pooled y direct.
Al activar pooled, Laravel enruta automáticamente las operaciones. Si dentro del código de la aplicación quieres usar explícitamente la conexión directa, añade el sufijo ::direct al nombre de la conexión.

Múltiples conexiones a base de datos

Puedes definir varias conexiones en config/database.php y cambiar entre ellas con DB::connection().

Ejecución de consultas SQL

La facade DB tiene métodos específicos por tipo de consulta.
No concatenes directamente entradas del usuario en la cadena SQL. Usa siempre argumentos con binding para evitar inyecciones SQL.

Escucha de consultas

Si quieres rastrear las consultas ejecutadas, registra DB::listen() en el boot() de un service provider.

Transacciones

Para tratar varias actualizaciones como una unidad, usa DB::transaction(). Si se lanza una excepción, Laravel hace rollback automáticamente.
Si necesitas reintentos por deadlock, pasa attempts.
Para un control manual, usa beginTransaction, rollBack y commit.

Próximos pasos

Query Builder

Aprende a construir consultas de forma segura utilizando la configuración de conexión.

Migrations

Aprende a versionar el esquema de la base de datos conectada.

Seeding

Aprende a poblar de forma reproducible datos para desarrollo y pruebas.
Última modificación el 20 de octubre de 2026