5-Migraciones en Laravel

Migraciones en Laravel

Las migraciones en Laravel son como un control de versiones para tu base de datos, permitiéndote modificar y compartir el esquema de la base de datos de tu aplicación.

Crear una nueva migración

Para crear una nueva migración, usa el comando Artisan:

bash
php artisan make:migration create_posts_table

Esto creará un nuevo archivo en database/migrations con un nombre similar a 2023_05_15_000000_create_posts_table.php.

Estructura básica de una migración

php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('content');
            $table->foreignId('user_id')->constrained();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};

Columnas comunes

  • $table->id() - Auto-incrementing ID (clave primaria)

  • $table->string('name') - Equivalente a VARCHAR

  • $table->text('description') - Para textos más largos

  • $table->integer('votes') - Número entero

  • $table->boolean('active') - Valor booleano

  • $table->timestamps() - Crea created_at y updated_at

Ejecutar migraciones

Para ejecutar todas las migraciones pendientes:

bash
php artisan migrate

Revertir migraciones

Para revertir la última operación de migración:

bash
php artisan migrate:rollback

Para revertir todas las migraciones:

bash
php artisan migrate:reset

Consejos

  1. Siempre prueba tus migraciones en un entorno de desarrollo antes de producción

  2. Usa nombres descriptivos para tus migraciones

  3. Considera usar migraciones para datos iniciales con php artisan make:seeder

Tablas Creadas por Defecto en Laravel

Sí, Laravel incluye varias migraciones predeterminadas que crean tablas esenciales para el funcionamiento básico de la aplicación. Estas se encuentran en el directorio database/migrations.

Migraciones predeterminadas

Las migraciones que vienen con una instalación fresca de Laravel son:

  1. 2014_10_12_000000_create_users_table.php - Crea la tabla users

  2. 2014_10_12_100000_create_password_reset_tokens_table.php - Crea la tabla para tokens de reseteo de contraseña

  3. 2019_08_19_000000_create_failed_jobs_table.php - Crea la tabla para jobs fallidos (si usas colas)

  4. 2019_12_14_000001_create_personal_access_tokens_table.php - Crea la tabla para tokens de acceso personal (API)

Estructura de la tabla users

La migración predeterminada para usuarios crea esta estructura:

php
Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
});

Campos importantes en la tabla users

  • id: Clave primaria autoincremental

  • name: Nombre del usuario

  • email: Dirección de email (única)

  • email_verified_at: Fecha de verificación del email (para sistemas de verificación)

  • password: Contraseña hasheada

  • remember_token: Para la funcionalidad "Recuérdame"

  • created_at y updated_at: Marcas de tiempo

¿Cómo se ejecutan estas migraciones?

Estas migraciones se ejecutan cuando corres:

bash
php artisan migrate

Personalización

Puedes modificar estas migraciones antes de ejecutarlas si necesitas:

  • Añadir campos adicionales a la tabla users

  • Cambiar tipos de datos

  • Modificar restricciones

Pero si ya las has ejecutado, deberás:

  1. Hacer un rollback (php artisan migrate:rollback)

  2. Modificar la migración

  3. Volver a migrar

O crear una nueva migración para añadir/modificar campos:

bash
php artisan make:migration add_username_to_users_table

Laravel también proporciona un sistema de autenticación listo para usar (php artisan make:auth) que utiliza estas tablas predeterminadas.


Modificando la Tabla de Usuarios por Defecto en Laravel

En este post veremos cómo modificar la tabla de usuarios que viene por defecto en Laravel para adaptarla a las necesidades de un sistema clínico.

Paso 1: Modificar la migración de usuarios

Primero, necesitamos agregar nuevos campos a nuestra tabla users:

bash
php artisan make:migration add_fields_to_users_table --table=users

En el archivo de migración generado:

php
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->string('documento')->after('email');
        $table->string('telefono')->after('documento');
        $table->string('sexo')->after('telefono');
        $table->integer('consultorio')->nullable()->after('sexo');
        $table->string('rol')->default('paciente')->after('consultorio');
    });
}

public function down()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn(['documento', 'telefono', 'sexo', 'consultorio', 'rol']);
    });
}

Ejecutamos la migración:

bash
php artisan migrate

Paso 2: Actualizar el Modelo User

En app/Models/User.php, agregamos los nuevos campos al atributo $fillable:

php
protected $fillable = [
    'name',
    'email',
    'password',
    'documento',
    'telefono',
    'sexo',
    'consultorio',
    'rol'
];

Paso 3: Configurar el sistema de autenticación

Instalamos el paquete UI de Laravel:

bash
composer require laravel/ui
php artisan ui bootstrap --auth

Paso 4: Modificar el controlador de registro

En app/Http/Controllers/Auth/RegisterController.php, actualizamos el método create:

php
protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
        'documento' => '',
        'telefono' => '',
        'sexo' => '',
        'consultorio' => 0,
        'rol' => 'secretaria' // Rol por defecto para el primer usuario
    ]);
}

Paso 5: Registrar el primer usuario

  1. Accede a /register en tu navegador

  2. Completa el formulario con:

    • Nombre: María Gaspar

    • Email: maria@gmail.com

    • Contraseña: 123 (solo para desarrollo)

  3. El sistema creará el primer usuario con rol de secretaria

Verificación en la base de datos

Puedes comprobar en tu cliente de base de datos que el usuario se creó correctamente con todos los campos adicionales.

Próximos pasos

En el siguiente tutorial veremos:

  • Cómo implementar la plantilla AdminLTE

  • Configurar diferentes roles y permisos

  • Personalizar el formulario de registro para todos los campos

Este enfoque nos permite mantener la estructura básica de Laravel pero adaptada completamente a las necesidades de nuestro sistema clínico, donde tendremos secretarias, administradores, pacientes y doctores todos en la misma tabla pero diferenciados por el campo rol.

Comentarios

Entradas más populares de este blog

8-Creación de una API RESTful con Laravel

02 -Rutas en Laravel

3-Rutas