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:
php artisan make:migration create_posts_tableEsto 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
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()- Creacreated_atyupdated_at
Ejecutar migraciones
Para ejecutar todas las migraciones pendientes:
php artisan migrateRevertir migraciones
Para revertir la última operación de migración:
php artisan migrate:rollbackPara revertir todas las migraciones:
php artisan migrate:resetConsejos
Siempre prueba tus migraciones en un entorno de desarrollo antes de producción
Usa nombres descriptivos para tus migraciones
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:
2014_10_12_000000_create_users_table.php - Crea la tabla
users2014_10_12_100000_create_password_reset_tokens_table.php - Crea la tabla para tokens de reseteo de contraseña
2019_08_19_000000_create_failed_jobs_table.php - Crea la tabla para jobs fallidos (si usas colas)
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:
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 autoincrementalname: Nombre del usuarioemail: Dirección de email (única)email_verified_at: Fecha de verificación del email (para sistemas de verificación)password: Contraseña hasheadaremember_token: Para la funcionalidad "Recuérdame"created_atyupdated_at: Marcas de tiempo
¿Cómo se ejecutan estas migraciones?
Estas migraciones se ejecutan cuando corres:
php artisan migratePersonalizació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:
Hacer un rollback (
php artisan migrate:rollback)Modificar la migración
Volver a migrar
O crear una nueva migración para añadir/modificar campos:
php artisan make:migration add_username_to_users_tableLaravel 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:
php artisan make:migration add_fields_to_users_table --table=usersEn el archivo de migración generado:
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:
php artisan migratePaso 2: Actualizar el Modelo User
En app/Models/User.php, agregamos los nuevos campos al atributo $fillable:
protected $fillable = [
'name',
'email',
'password',
'documento',
'telefono',
'sexo',
'consultorio',
'rol'
];Paso 3: Configurar el sistema de autenticación
Instalamos el paquete UI de Laravel:
composer require laravel/ui
php artisan ui bootstrap --authPaso 4: Modificar el controlador de registro
En app/Http/Controllers/Auth/RegisterController.php, actualizamos el método create:
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
Accede a
/registeren tu navegadorCompleta el formulario con:
Nombre: María Gaspar
Email: maria@gmail.com
Contraseña: 123 (solo para desarrollo)
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
Publicar un comentario