Lección 16 de 45 12 min de lectura

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:

.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mi_aplicacion
DB_USERNAME=root
DB_PASSWORD=
Nunca subas .env a Git

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.

.env
DB_CONNECTION=sqlite
# DB_DATABASE se configura automáticamente como database/database.sqlite

Si el archivo no existe, créalo:

bash
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:

sql
CREATE DATABASE mi_aplicacion CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Luego configura las credenciales en .env:

.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
Con Laravel Sail

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.

.env
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
<?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:

bash
# 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:

bash
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.

.env
# 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
<?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:

  1. El servidor de base de datos no está ejecutándose: Inicia MySQL/PostgreSQL con sudo service mysql start
  2. Host incorrecto: Verifica DB_HOST en .env (127.0.0.1 para local, nombre del contenedor para Docker)
  3. Puerto incorrecto: Verifica DB_PORT (3306 para MySQL, 5432 para PostgreSQL)
  4. Caché de configuración: Ejecuta php artisan config:clear
  5. Con Laravel Sail: El host debe ser mysql o pgsql, no 127.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_CONNECTION define qué driver usar (mysql, pgsql, sqlite, sqlsrv)
  • SQLite es ideal para desarrollo porque no requiere servidor
  • El archivo config/database.php lee las variables de .env
  • Usa php artisan config:clear después de cambiar .env
  • Puedes configurar múltiples conexiones para diferentes bases de datos

¿Te está gustando el curso?

Tenemos cursos premium con proyectos reales, soporte personalizado y certificado.

Descubrir cursos premium