Módulo 3 · Lección 1 12 min

Configurar la base de datos

Aprende a conectar Laravel con MySQL, PostgreSQL y SQLite configurando correctamente el archivo .env y database.php.

Configurar la base de datos en Laravel

Una de las primeras tareas al iniciar un proyecto con Laravel es conectarlo a una base de datos. Laravel soporta varios motores: MySQL, PostgreSQL, SQLite y SQL Server. La configuración es sencilla y se centraliza en dos lugares: el archivo .env y el archivo config/database.php.

El archivo .env

El archivo .env se encuentra en la raíz del proyecto y contiene variables de entorno específicas de cada instalación. Nunca debe subirse al repositorio (ya está en .gitignore por defecto). Aquí se definen las credenciales de la base de datos:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mi_blog
DB_USERNAME=root
DB_PASSWORD=secreto

Cada variable tiene un propósito claro:

  • DB_CONNECTION: el driver a usar (mysql, pgsql, sqlite, sqlsrv)
  • DB_HOST: la dirección del servidor de base de datos
  • DB_PORT: el puerto (3306 para MySQL, 5432 para PostgreSQL)
  • DB_DATABASE: el nombre de la base de datos
  • DB_USERNAME y DB_PASSWORD: las credenciales de acceso

El archivo config/database.php

Este archivo lee las variables del .env mediante la función env() y define los parámetros de cada conexión disponible. No es necesario modificarlo directamente en la mayoría de los casos, pero es útil conocerlo:

'connections' => [

    'sqlite' => [
        'driver'   => 'sqlite',
        'database' => env('DB_DATABASE', database_path('database.sqlite')),
        'prefix'   => '',
    ],

    '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',
        'prefix'      => '',
        'strict'      => true,
        'engine'      => null,
    ],

    'pgsql' => [
        'driver'   => 'pgsql',
        'host'     => env('DB_HOST', '127.0.0.1'),
        'port'     => env('DB_PORT', '5432'),
        'database' => env('DB_DATABASE', 'laravel'),
        'username' => env('DB_USERNAME', 'postgres'),
        'password' => env('DB_PASSWORD', ''),
        'charset'  => 'utf8',
        'prefix'   => '',
        'schema'   => 'public',
    ],

],

Configurar MySQL

MySQL es el motor más popular en proyectos Laravel. Para usarlo, necesitas tenerlo instalado y crear la base de datos primero:

CREATE DATABASE mi_blog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Luego actualiza el .env:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mi_blog
DB_USERNAME=tu_usuario
DB_PASSWORD=tu_contraseña

El charset utf8mb4 es importante porque soporta emojis y caracteres especiales. Evita usar utf8 a secas en MySQL, ya que es una implementación incompleta.

Configurar PostgreSQL

PostgreSQL es una excelente alternativa a MySQL, especialmente para proyectos que necesitan funciones avanzadas como JSON nativo, búsqueda de texto completo o transacciones más robustas:

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=mi_blog
DB_USERNAME=postgres
DB_PASSWORD=tu_contraseña

Crea la base de datos en PostgreSQL así:

CREATE DATABASE mi_blog;

Configurar SQLite

SQLite es ideal para desarrollo local, pruebas o proyectos pequeños porque no requiere servidor. Laravel 11 lo usa por defecto:

DB_CONNECTION=sqlite
DB_DATABASE=/ruta/absoluta/al/proyecto/database/database.sqlite

También puedes dejar la variable DB_DATABASE vacía si usas la ruta por defecto, o crear el archivo manualmente:

touch database/database.sqlite

Verificar la conexión

Una vez configurado el .env, puedes verificar que Laravel conecta correctamente con la base de datos usando Artisan:

php artisan db:show

Este comando muestra el driver, la base de datos, el host, el puerto y un listado de las tablas existentes. Si hay un error de conexión, verás un mensaje descriptivo.

También puedes usar Tinker para probar directamente:

php artisan tinker
DB::connection()->getPdo();

Si no lanza ninguna excepción, la conexión es exitosa.

Limpiar la caché de configuración

Laravel cachea la configuración para mejorar el rendimiento. Si modificas el .env y los cambios no se reflejan, debes limpiar la caché:

php artisan config:clear
php artisan config:cache

En desarrollo es recomendable no cachear la configuración, ya que cada cambio en el .env requeriría limpiarla manualmente.

Múltiples conexiones

Laravel permite definir y usar múltiples conexiones de base de datos en un mismo proyecto. Puedes especificar la conexión al hacer consultas:

$usuarios = DB::connection('mysql')->table('users')->get();
$reportes  = DB::connection('pgsql')->table('reportes')->get();

También puedes definir la conexión en el modelo:

class Reporte extends Model
{
    protected $connection = 'pgsql';
}

Esto es útil en sistemas que leen datos de diferentes fuentes o que mantienen bases de datos separadas por módulo o tenancy.

Buenas prácticas

  • Nunca subas el archivo .env al repositorio. Sube solo el .env.example con valores vacíos o de ejemplo.
  • Usa contraseñas fuertes incluso en entornos de desarrollo.
  • En producción, considera usar variables de entorno del sistema operativo en lugar del archivo .env.
  • Siempre usa utf8mb4 en MySQL para evitar problemas con caracteres especiales.
  • Crea la base de datos antes de ejecutar las migraciones.

Con la base de datos correctamente configurada, el siguiente paso es crear las tablas mediante migraciones, que veremos en la próxima lección.

Quiz

Pon a prueba lo aprendido

Responde las preguntas para comprobar que has entendido los conceptos clave.

1. ¿En qué archivo de Laravel se configuran las credenciales de la base de datos?

2. ¿Cuál es el driver de base de datos que usa Laravel por defecto en instalaciones nuevas?

3. ¿Qué comando de Artisan permite verificar la conexión a la base de datos?