Configuración de Base de Datos
Laravel soporta múltiples bases de datos: MySQL,
PostgreSQL, SQLite y SQL Server. En esta lección
aprenderás a configurar la conexión usando
variables de entorno y el archivo
.env.
El archivo .env
Laravel usa variables de entorno para configurar la base de datos. Esto permite tener diferentes configuraciones para desarrollo, testing y producción sin modificar el código.
El archivo .env está en la raíz del
proyecto y contiene las credenciales de
conexión:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mi_aplicacion
DB_USERNAME=root
DB_PASSWORD=
El archivo .env contiene
credenciales sensibles y ya está
incluido en .gitignore.
Nunca lo subas al repositorio.
Bases de datos soportadas
Laravel soporta cuatro sistemas de bases de
datos. El valor de
DB_CONNECTION determina cuál usar:
- mysql - MySQL / MariaDB
- pgsql - PostgreSQL
- sqlite - SQLite (archivo local)
- sqlsrv - SQL Server
Configurar SQLite
SQLite es ideal para desarrollo y testing porque no requiere un servidor de base de datos. Laravel 12 lo usa por defecto en proyectos nuevos.
DB_CONNECTION=sqlite
# DB_DATABASE se configura automáticamente como database/database.sqlite
Si el archivo no existe, créalo:
touch database/database.sqlite
Configurar MySQL
MySQL es la opción más común en producción. Primero, crea la base de datos en MySQL:
CREATE DATABASE mi_aplicacion CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Luego configura las credenciales en
.env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mi_aplicacion
DB_USERNAME=root
DB_PASSWORD=tu_contraseña
Si usas Laravel Sail, el host es
mysql (nombre del
contenedor) en lugar de
127.0.0.1. Sail ya
configura esto automáticamente.
Configurar PostgreSQL
PostgreSQL es una alternativa robusta a MySQL, especialmente popular en aplicaciones que requieren consultas complejas.
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=mi_aplicacion
DB_USERNAME=postgres
DB_PASSWORD=tu_contraseña
El archivo config/database.php
El archivo
config/database.php contiene la
configuración completa de todas las conexiones.
Las variables de .env se leen aquí
usando la función env():
<?php
// config/database.php (fragmento)
return [
'default' => env('DB_CONNECTION', 'sqlite'),
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => database_path('database.sqlite'),
],
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'laravel'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
],
],
];
Normalmente no necesitas modificar este archivo.
Las variables de .env son
suficientes para la mayoría de casos.
Verificar la conexión
Usa Artisan para verificar que la conexión funciona correctamente:
# Ejecutar las migraciones verifica la conexión
php artisan migrate:status
Si la conexión es correcta, verás una tabla con
el estado de las migraciones. Si hay un error,
revisa las credenciales en .env.
Limpiar la caché de configuración
Si cambias valores en .env y no se
reflejan, limpia la caché de configuración:
php artisan config:clear
Múltiples conexiones
Laravel permite conectar a varias bases de datos simultáneamente. Esto es útil para separar datos de lectura/escritura o integrar sistemas externos.
# Conexión principal
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=mi_aplicacion
DB_USERNAME=root
DB_PASSWORD=secreto
# Segunda conexión (analytics)
DB_ANALYTICS_HOST=192.168.1.100
DB_ANALYTICS_DATABASE=analytics
DB_ANALYTICS_USERNAME=analytics_user
DB_ANALYTICS_PASSWORD=otra_clave
Luego defines la conexión en
config/database.php y la usas
especificando el nombre:
<?php
// Usar una conexión específica
$results = DB::connection('analytics')->select('SELECT * FROM events');
Ejercicios
Ejercicio 1: Configurar SQLite
Configura tu proyecto para usar SQLite. Crea el
archivo de base de datos y verifica la conexión
ejecutando
php artisan migrate:status.
Ver solución
# 1. Editar .env
DB_CONNECTION=sqlite
# 2. Crear el archivo de base de datos
touch database/database.sqlite
# 3. Verificar la conexión
php artisan migrate:status
Ejercicio 2: Cambiar a MySQL
Cambia la configuración de SQLite a MySQL. Crea
una base de datos llamada
curso_laravel y configura las
credenciales en .env.
Ver solución
-- En MySQL, crear la base de datos:
CREATE DATABASE curso_laravel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# Editar .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=curso_laravel
DB_USERNAME=root
DB_PASSWORD=tu_contraseña
# Limpiar caché y verificar:
php artisan config:clear
php artisan migrate:status
Ejercicio 3: Diagnosticar error de conexión
Tu aplicación muestra el error "SQLSTATE[HY000] [2002] Connection refused". ¿Cuáles son las posibles causas y cómo las solucionarías?
Ver solución
Posibles causas y soluciones:
-
El servidor de base de datos no
está ejecutándose: Inicia MySQL/PostgreSQL con
sudo service mysql start -
Host incorrecto:
Verifica
DB_HOSTen .env (127.0.0.1 para local, nombre del contenedor para Docker) -
Puerto incorrecto:
Verifica
DB_PORT(3306 para MySQL, 5432 para PostgreSQL) -
Caché de configuración:
Ejecuta
php artisan config:clear -
Con Laravel Sail: El
host debe ser
mysqlopgsql, no127.0.0.1
Resumen
-
Las credenciales de base de datos se
configuran en el archivo
.env - Laravel soporta MySQL, PostgreSQL, SQLite y SQL Server
-
DB_CONNECTIONdefine qué driver usar (mysql, pgsql, sqlite, sqlsrv) - SQLite es ideal para desarrollo porque no requiere servidor
-
El archivo
config/database.phplee las variables de.env -
Usa
php artisan config:cleardespués de cambiar.env - Puedes configurar múltiples conexiones para diferentes bases de datos
¿Has encontrado un error o tienes una sugerencia para mejorar esta lección?
Escríbenos¿Te está gustando el curso?
Tenemos cursos premium con proyectos reales, soporte personalizado y certificado.
Descubrir cursos premium