Modelos Eloquent

El proyecto cuenta con 8 modelos Eloquent que definen la estructura de datos del sistema.

1. User

Ubicación: app/Models/User.php

Modelo principal que representa a los usuarios del sistema.

Atributos

Atributo Tipo Descripción
id int Identificador único
name string Nombre completo del usuario
email string Correo electrónico (único)
password string Contraseña hasheada
role_id int FK al rol del usuario
email_verified_at datetime Fecha de verificación del email
remember_token string Token para recordar sesión
created_at datetime Fecha de creación
updated_at datetime Fecha de actualización

Relaciones

class User extends Authenticatable
{
    // Relación con el rol
    public function role(): BelongsTo
    {
        return $this->belongsTo(Role::class);
    }

    // Relación con presentaciones
    public function presentations(): HasMany
    {
        return $this->hasMany(Presentation::class);
    }

    // Relación con pósters
    public function posters(): HasMany
    {
        return $this->hasMany(Poster::class);
    }
}

Métodos

public function getInitialsAttribute(): string

Retorna las iniciales del nombre (máximo 2 caracteres).

public function getInitialsAttribute(): string
{
    $words = explode(' ', $this->name);
    $initials = '';

    foreach ($words as $word) {
        $initials .= strtoupper($word[0]);
        if (strlen($initials) >= 2) break;
    }

    return $initials;
}

2. Role

Ubicación: app/Models/Role.php

Atributos

Atributo Tipo Descripción
id int Identificador único
name string Nombre del rol (asistente, ponente, admin)
created_at datetime Fecha de creación
updated_at datetime Fecha de actualización

Relaciones

public function users(): HasMany
{
    return $this->hasMany(User::class);
}

3. Poster

Ubicación: app/Models/Poster.php

Modelo para gestionar los pósters del congreso.

Atributos

Atributo Tipo Descripción
id int Identificador único
title string Título del póster
summary string Resumen o abstract
url_file string Ruta al archivo PDF
type_presentation_id int FK al tipo de presentación
user_id int FK al autor
category_id int FK a la categoría
published bool Estado de publicación
created_at datetime Fecha de creación
updated_at datetime Fecha de actualización

Relaciones

public function type_presentation(): BelongsTo
{
    return $this->belongsTo(TypePresentation::class);
}

public function user(): BelongsTo
{
    return $this->belongsTo(User::class);
}

public function category(): BelongsTo
{
    return $this->belongsTo(Category::class);
}

4. Presentation

Ubicación: app/Models/Presentation.php

Atributos

Atributo Tipo Descripción
id int Identificador único
title string Título de la presentación
summary string Resumen o abstract
url_file string Ruta al archivo
type_file string Tipo de archivo (PDF, POWERPOINT, etc.)
type_presentation_id int FK al tipo de presentación
user_id int FK al autor
category_id int FK a la categoría
published bool Estado de publicación
created_at datetime Fecha de creación
updated_at datetime Fecha de actualización

Relaciones

public function type_presentation(): BelongsTo
{
    return $this->belongsTo(TypePresentation::class);
}

public function user(): BelongsTo
{
    return $this->belongsTo(User::class);
}

public function category(): BelongsTo
{
    return $this->belongsTo(Category::class);
}

6. Category

Ubicación: app/Models/Category.php

Atributos

Atributo Tipo Descripción
id int Identificador único
name string Nombre de la categoría
description text Descripción
created_at datetime Fecha de creación
updated_at datetime Fecha de actualización

Relaciones

public function presentations(): HasMany
{
    return $this->hasMany(Presentation::class);
}

public function posters(): HasMany
{
    return $this->hasMany(Poster::class);
}

7. TypeSponsor

Ubicación: app/Models/TypeSponsor.php

Atributos

Atributo Tipo Descripción
id int Identificador único
name string Nombre del tipo (oro, plata, bronce, colaborador, institucional)
created_at datetime Fecha de creación
updated_at datetime Fecha de actualización

Relaciones

public function sponsors(): HasMany
{
    return $this->hasMany(Sponsor::class);
}

8. TypePresentation

Ubicación: app/Models/TypePresentation.php

Atributos

Atributo Tipo Descripción
id int Identificador único
name string Nombre del tipo
description text Descripción
created_at datetime Fecha de creación
updated_at datetime Fecha de actualización

Relaciones

public function presentations(): HasMany
{
    return $this->hasMany(Presentation::class);
}

public function posters(): HasMany
{
    return $this->hasMany(Poster::class);
}