Models

A continuación se desglosaran ciertas partes del código que nos ayudaran a entender como funcionan ciertos apartados del sitio en el backend, desarrollado con laravel.

Capitulo

Representa la tabla de capítulos en la base de datos y proporciona una interfaz para interactuar con ella.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Capitulo extends Model
{
    use HasFactory;

    protected $fillable = [
        'id_curso',
        'titulo',
        'descripcion',
    ];

    public function curso()
    {
        return $this->belongsTo(Curso::class);
    }

    public function subcapitulos()
    {
        return $this->hasMany(SubCapitulo::class, 'id_capitulo', 'id');
    }
}

Descripción de Código

  1. Uso de HasFactory: Este trait permite que el modelo use la fábrica de modelos para generar instancias de Capitulo en pruebas y seeding.

  2. Propiedad $fillable: Define los atributos que se pueden asignar en masa al crear o actualizar un modelo. En este caso, los atributos que se pueden asignar en masa son id_curso, titulo, y descripcion.

  3. Método curso(): Establece una relación de "pertenece a" con el modelo Curso. Esto indica que cada capítulo pertenece a un curso específico. La relación se configura utilizando la clave foránea id_curso en la tabla de capítulos que referencia la clave primaria del curso.

  4. Método subcapitulos(): Define una relación de "tiene muchos" con el modelo SubCapitulo. Esto indica que un capítulo puede tener múltiples subcapítulos. La relación se establece utilizando la clave foránea id_capitulo en la tabla de subcapítulos que referencia la clave primaria del capítulo.

Comentarios

Representa la tabla de "likes" de comentarios en la base de datos y proporciona una interfaz para interactuar con ella.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\Usuario; 
use App\Models\Comentario;

class Comentario_like extends Model
{
    use HasFactory;
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'comentarios_likes';

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'progreso',
        'id_usuario',
        'id_comentario',
    ];

    /**
     * Get the user that owns the comentario like.
     */
    public function usuario()
    {
        return $this->belongsTo(User::class, 'id_usuario', 'id');
    }

    /**
     * Get the comentario that the like belongs to.
     */
    public function comentario()
    {
        return $this->belongsTo(Comentario::class, 'id_comentario', 'id');
    }
}
  1. Uso de HasFactory: Permite que el modelo use la fábrica de modelos para generar instancias de Comentario_like en pruebas y seeding.

  2. Propiedad $table: Especifica el nombre de la tabla asociada con el modelo. En este caso, la tabla es comentarios_likes.

  3. Propiedad $fillable: Define los atributos que se pueden asignar en masa al crear o actualizar un modelo. Aquí, los atributos asignables son progreso, id_usuario, y id_comentario.

  4. Método usuario(): Establece una relación de "pertenece a" con el modelo User (o Usuario en algunos casos). Esto indica que cada "like" en un comentario está asociado a un usuario específico. La relación se configura utilizando la clave foránea id_usuario en la tabla de "likes" que referencia la clave primaria del usuario.

  5. Método comentario(): Define una relación de "pertenece a" con el modelo Comentario. Esto indica que un "like" en un comentario pertenece a un comentario específico. La relación se configura utilizando la clave foránea id_comentario en la tabla de "likes" que referencia la clave primaria del comentario.

Curso_Usuario

Representa una tabla de relación entre cursos y usuarios, gestionando los datos sobre la inscripción de usuarios en cursos.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\Usuario;
use App\Models\Curso;

class Curso_usuario extends Model
{
    use HasFactory;

    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'cursos_usuarios';

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'diploma',
        'valoracion',
        'progreso',
        'id_usuario',
        'id_curso',
    ];


    public static function obtenerInscritos($id_curso) {
        return self::where('id_curso', $id_curso)->count();
    }

    /**
     * Get the user that owns the CursoUsuario.
     */
    public function usuario()
    {
        return $this->belongsTo(Usuario::class, 'id_usuario', 'id');
    }

    /**
     * Get the curso that the CursoUsuario belongs to.
     */
    public function curso()
    {
        return $this->belongsTo(Curso::class, 'id_curso', 'id');
    }
}

Descripción de Codigo

  1. Uso de HasFactory: Permite que el modelo utilice la fábrica de modelos para la creación de instancias en pruebas y procesos de seeding.

  2. Propiedad $table: Especifica el nombre de la tabla asociada con el modelo. En este caso, la tabla es cursos_usuarios.

  3. Propiedad $fillable: Define los atributos que pueden ser asignados en masa. Los atributos asignables aquí son diploma, valoracion, progreso, id_usuario, y id_curso.

  4. Método obtenerInscritos($id_curso): Un método estático que devuelve el número de usuarios inscritos en un curso específico, basado en el id_curso. Utiliza la consulta para contar el número de registros en la tabla cursos_usuarios que tienen el id_curso especificado.

  5. Método usuario(): Establece una relación de "pertenece a" con el modelo Usuario. Esto indica que cada registro en cursos_usuarios está asociado a un usuario específico. La relación se configura mediante la clave foránea id_usuario, que referencia la clave primaria del usuario.

  6. Método curso(): Define una relación de "pertenece a" con el modelo Curso. Esto indica que cada registro en cursos_usuarios está asociado a un curso específico. La relación se configura mediante la clave foránea id_curso, que referencia la clave primaria del curso.

Examen

Representa la tabla exámenes en la base de datos, que almacena la información relacionada con los exámenes.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Examen extends Model
{
    use HasFactory;
    protected $table = 'examenes';
    protected $fillable = [
        'nombre', 'descripcion', 'calificacion', 'intentos', 'id_usuario', 'id_curso'
    ];

    public function preguntas()
    {
        return $this->belongsToMany(Pregunta::class, 'preguntas_a_examenes', 'id_examen', 'id_pregunta');
    }

    public function usuario()
    {
        return $this->belongsTo(User::class, 'id_usuario');
    }

    public function curso()
    {
        return $this->belongsTo(Curso::class, 'id_curso');
    }
}

Descripción de Código

  1. Uso de HasFactory: Permite la utilización de la fábrica de modelos para crear instancias de Examen en pruebas y procesos de seeding.

  2. Propiedad $table: Especifica que el modelo está asociado a la tabla examenes.

  3. Propiedad $fillable: Define los atributos que pueden ser asignados en masa. En este caso, los atributos asignables son nombre, descripcion, calificacion, intentos, id_usuario, y id_curso.

  4. Método preguntas(): Establece una relación de muchos a muchos con el modelo Pregunta. Utiliza una tabla intermedia llamada preguntas_a_examenes para gestionar la relación entre exámenes y preguntas. La relación se define a través de las claves foráneas id_examen y id_pregunta.

  5. Método usuario(): Define una relación de "pertenece a" con el modelo User. Esto indica que cada examen está asociado a un usuario específico, utilizando la clave foránea id_usuario.

  6. Método curso(): Define una relación de "pertenece a" con el modelo Curso. Esto indica que cada examen está asociado a un curso específico, utilizando la clave foránea id_curso.

Last updated