Tutorial 4: Migrar Tablas y Crear Primer Usuario
4: Migrar Tablas y Crear Primer Usuario
1. Introducción
En este tutorial modificaremos la tabla de usuarios para adaptarla a nuestro sistema de citas médicas, ejecutaremos las migraciones de Laravel e instalaremos el sistema de autenticación para poder crear nuestro primer usuario. Este será el paso inicial para comenzar a trabajar con los diferentes roles en nuestra aplicación.
2. Migraciones por Defecto en Laravel
Cuando instalamos Laravel, ya vienen incluidas algunas migraciones predeterminadas:
| Migración | Descripción |
|---|---|
create_users_table | Tabla de usuarios (la más importante) |
create_password_resets_table | Tabla para restablecer contraseñas |
create_failed_jobs_table | Tabla para trabajos fallidos |
La tabla users es la que modificaremos para adaptarla a nuestro sistema.
3. Modificar la Tabla de Usuarios
Paso 1: Localizar el archivo de migración
Ve a la carpeta database/migrations/ y busca el archivo que contiene create_users_table. Su nombre será similar a:
database/migrations/2024_01_01_000000_create_users_table.phpPaso 2: Modificar el esquema de la tabla
Abriremos el archivo y agregaremos nuevos campos a la tabla users. En el método up(), dentro del Schema::create, agregamos:
public function up()
{
Schema::create('users', function (Blueprint $table) {
// Campos existentes
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
// ════════════════════════════════════════════════════════
// NUEVOS CAMPOS PARA NUESTRO SISTEMA DE CITAS MÉDICAS
// ════════════════════════════════════════════════════════
$table->string('documento', 20)->nullable(); // Número de identificación
$table->string('telefono', 20)->nullable(); // Teléfono de contacto
$table->string('sexo', 10)->nullable(); // Sexo del usuario
$table->integer('consultorio')->nullable(); // ID del consultorio (para doctores)
$table->string('rol', 20)->default('paciente'); // Rol: admin, secretaria, doctor, paciente
$table->timestamps();
});
}4. Ejecutar las Migraciones
Paso 1: Abrir la terminal
Abre el símbolo del sistema o terminal y navega a la carpeta de tu proyecto:
cd C:\xampp\htdocs\clinica-l8Paso 2: Ejecutar el comando de migración
php artisan migrateResultado esperado
Verás un mensaje similar a:
Migration table created successfully.
Migrating: 2024_01_01_000000_create_users_table
Migrated: 2024_01_01_000000_create_users_table (0.05 seconds)
Migrating: 2024_01_01_000001_create_password_resets_table
Migrated: 2024_01_01_000001_create_password_resets_table (0.03 seconds)
Migrating: 2024_01_01_000002_create_failed_jobs_table
Migrated: 2024_01_01_000002_create_failed_jobs_table (0.02 seconds)Paso 3: Verificar en la base de datos
Ve a phpMyAdmin (http://localhost/phpmyadmin) y revisa tu base de datos clinica_l8. Deberías ver:
┌─────────────────────────────┐
│ TABLAS CREADAS │
├─────────────────────────────┤
│ ✓ users │
│ ✓ password_resets │
│ ✓ failed_jobs │
│ ✓ migrations │
└─────────────────────────────┘Si abres la tabla users, verás que los nuevos campos están creados.
5. Instalar el Sistema de Autenticación
Para poder registrar usuarios fácilmente, instalaremos el paquete de autenticación de Laravel.
Paso 1: Instalar laravel/ui
En la terminal, ejecuta:
composer require laravel/uiEspera a que se complete la descarga.
Paso 2: Generar los archivos de autenticación
php artisan ui bootstrap --authPaso 3: Compilar los assets (opcional)
Si tienes Node.js instalado, puedes compilar los assets:
npm install && npm run dev6. Modificar el Modelo User
Para que Laravel pueda insertar los nuevos campos, debemos actualizar el modelo User.
Abrir el archivo app/Models/User.php
Agrega los nuevos campos a la propiedad $fillable:
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
'documento', // ← NUEVO
'telefono', // ← NUEVO
'sexo', // ← NUEVO
'consultorio', // ← NUEVO
'rol', // ← NUEVO
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}7. Modificar el Controlador de Registro
Ahora actualizaremos el controlador de registro para que maneje los nuevos campos.
Abrir el archivo app/Http/Controllers/Auth/RegisterController.php
Busca el método create() y agrega los nuevos campos:
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'documento' => $data['documento'] ?? null, // ← NUEVO
'telefono' => $data['telefono'] ?? null, // ← NUEVO
'sexo' => $data['sexo'] ?? null, // ← NUEVO
'consultorio' => $data['consultorio'] ?? 0, // ← NUEVO
'rol' => $data['rol'] ?? 'paciente', // ← NUEVO
]);
}8. Modificar la Vista de Registro
Para poder ingresar los nuevos campos, debemos agregarlos al formulario de registro.
Abrir el archivo resources/views/auth/register.blade.php
Agrega los nuevos campos entre el formulario:
<!-- Nombre -->
<div class="form-group row">
<label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>
<div class="col-md-6">
<input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
@error('name')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<!-- Email -->
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<!-- ════════════════════════════════════════════════════════ -->
<!-- NUEVOS CAMPOS PARA EL SISTEMA DE CITAS MÉDICAS -->
<!-- ════════════════════════════════════════════════════════ -->
<!-- Documento -->
<div class="form-group row">
<label for="documento" class="col-md-4 col-form-label text-md-right">{{ __('Documento') }}</label>
<div class="col-md-6">
<input id="documento" type="text" class="form-control" name="documento" value="{{ old('documento') }}">
</div>
</div>
<!-- Teléfono -->
<div class="form-group row">
<label for="telefono" class="col-md-4 col-form-label text-md-right">{{ __('Teléfono') }}</label>
<div class="col-md-6">
<input id="telefono" type="text" class="form-control" name="telefono" value="{{ old('telefono') }}">
</div>
</div>
<!-- Sexo -->
<div class="form-group row">
<label for="sexo" class="col-md-4 col-form-label text-md-right">{{ __('Sexo') }}</label>
<div class="col-md-6">
<select id="sexo" class="form-control" name="sexo">
<option value="">Seleccionar</option>
<option value="Masculino">Masculino</option>
<option value="Femenino">Femenino</option>
</select>
</div>
</div>
<!-- Rol (Oculto para este registro) -->
<!-- Como solo registraremos un usuario por ahora, ocultamos el rol -->
<!-- Contraseña -->
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<!-- Confirmar Contraseña -->
<div class="form-group row">
<label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
</div>
</div>9. Crear el Primer Usuario
Ahora que todo está configurado, crearemos nuestro primer usuario.
Paso 1: Acceder al formulario de registro
Abre tu navegador y ve a:
http://127.0.0.1:8000/registerPaso 2: Completar el formulario
Ingresa los siguientes datos:
| Campo | Valor |
|---|---|
| Name | María Gaspard |
| maria@example.com | |
| Documento | 12345678 |
| Teléfono | 555-1234 |
| Sexo | Femenino |
| Password | 123 (por ahora) |
| Confirm Password | 123 |
Paso 3: Registrar
Haz clic en "Register".
Paso 4: Verificar en la base de datos
Ve a phpMyAdmin y revisa la tabla users:
SELECT * FROM users;Deberías ver tu primer usuario registrado con el rol paciente por defecto.
10. Modificar el Rol del Usuario (Manual)
Como queremos que el primer usuario sea Administrador, lo modificamos manualmente.
Opción 1: Desde phpMyAdmin
Ve a la tabla
usersBusca el usuario creado
Edita el campo
roly cámbialo aadminGuarda los cambios
Opción 2: Desde Tinker (Línea de comandos)
php artisan tinkerLuego ejecuta:
$user = User::find(1);
$user->rol = 'admin';
$user->save();11. Verificación Final
Paso 1: Cerrar sesión
Si estás autenticado, cierra sesión desde la opción "Logout" en la esquina superior derecha.
Paso 2: Iniciar sesión
Ve a:
http://127.0.0.1:8000/loginIngresa:
Email: maria@example.com
Password: 123
Paso 3: Verificar
Una vez autenticado, deberías ver el dashboard de Laravel. ¡Tu usuario administrador está listo!
12. Resumen de Comandos
# Ver las migraciones disponibles
php artisan migrate:status
# Ejecutar todas las migraciones
php artisan migrate
# Crear una nueva migración
php artisan make:migration add_fields_to_users_table
# Instalar autenticación
composer require laravel/ui
php artisan ui bootstrap --auth
npm install && npm run dev
# Abrir consola interactiva
php artisan tinker13. Solución de Problemas
| Problema | Solución |
|---|---|
Class not found | Ejecuta composer dump-autoload |
Migration already exists | Ejecuta php artisan migrate:fresh (borra y recrea) |
SQLSTATE[HY000] [1049] | Revisa el nombre de la base de datos en .env |
Field not found | Revisa que los campos estén en $fillable del modelo |
| El registro no muestra nuevos campos | Revisa el archivo register.blade.php |
14. Conclusión
🎉 ¡Excelente! Hemos:
✅ Modificado la tabla de usuarios con nuevos campos
✅ Ejecutado las migraciones correctamente
✅ Instalado el sistema de autenticación
✅ Actualizado el modelo y controlador de registro
✅ Creado nuestro primer usuario Administrador
En el próximo tutorial implementaremos la plantilla AdminLTE para darle un diseño profesional a nuestro sistema de citas médicas
Comentarios
Publicar un comentario