2DAW-CarlosIII / marcapersonalFP23_24

Web marcapersonalFP.es desarrollada como proyecto por un grupo de estudiantes de 2DAW CarlosIII
1 stars 25 forks source link

4.7.2. Ejercicios de Bases de Datos de Currículos #130

Closed albsierra closed 11 months ago

albsierra commented 11 months ago

En estos ejercicios vamos a continuar con la gestión de marcapersonalFP.es, que habíamos empezado en sesiones anteriores y le añadiremos todo lo referente a la gestión de la base de datos.

Ejercicio 1 - Configuración de la base de datos y migraciones.

En primer lugar, vamos a comprobar la correcta configuración de la base de datos. Para esto, tenemos que abrir el fichero .env para comprobar que vamos a usar una base de datos tipo MySQL llamada marcapersonalfp junto con el nombre de usuario y contraseña de acceso.

A continuación, abrimos PHPMyAdmin y comprobamos que el usuario llamado marcapersonalfp y la base de datos con el mismo nombre están creados. Por último, abriremos un terminal en la carpeta de nuestro proyecto y ejecutamos el comando que traslada las migraciones realizadas hasta este momento.

php artisan migrate

Si nos diese algún error tendremos que revisar los valores indicados en el fichero .env. En caso de ser correctos es posible que también tengamos que reiniciar el servidor o terminal que tengamos abierto.

Ahora vamos a crear la tabla que utilizaremos para almacenar los curriculos. Ejecuta el comando de Artisan para crear la migración llamada create_curriculos_table para la tabla curriculos.

Renombra el archivo como 2023_11_29_000002_create_curriculos_table.php

Una vez creado, edita este fichero para añadir todos los campos necesarios, estos son:

Campo Tipo nullable
user_id unsignedBigInteger no
video_curriculum string()
texto_curriculum mediumText

Recuerda que, en el método down() de la migración, tienes que deshacer los cambios que has hecho en el método up(), en este caso, sería eliminar la tabla.

Por último, ejecutaremos el comando de Artisan que añade las nuevas migraciones y comprobaremos que la tabla se ha creado correctamente con los campos que le hemos indicado.

Ejercicio 2 - Modelo de datos

En este ejercicio vamos a crear el modelo de datos asociado con la tabla curriculos. Para esto usaremos el comando apropiado de Artisan para crear el modelo llamado Curriculo.

Una vez creado este fichero, lo abriremos y comprobaremos que el nombre de la clase sea el correcto y que herede de la clase Model. Y ya está, no es necesario hacer nada más, el cuerpo de la clase puede estar vacío ({}), todo lo demás se hace automáticamente!

Ejercicio 3 - Semillas

Ahora vamos a proceder a rellenar la tabla de la base de datos con los datos iniciales. Para esto, editamos el fichero de semillas situado en database/seeders/DatabaseSeeder.php y seguiremos los siguientes pasos:

  1. Creamos un fichero semilla llamado CurriculosTableSeeder que se tendrá que llamar desde el método run() de la clase DatabaseSeeder:

        public function run(): void
        {
            Model::unguard();
            Schema::disableForeignKeyConstraints();
    
            // llamadas a otros ficheros de seed
            $this->call(CurriculosTableSeeder::class);
            // llamadas a otros ficheros de seed
    
            Model::reguard();
    
            Schema::enableForeignKeyConstraints();
        }
  2. Movemos el array de curriculos que se facilitaba en los materiales y que habíamos copiado dentro del controlador CurriculoController a la clase de semillas (CurriculosTableSeeder.php), guardándolo como variable privada de la clase.

  3. Dentro del método run() de la clase CurriculosTableSeeder realizamos las siguientes acciones:

    1. En primer lugar borramos el contenido de la tabla curriculos con Curriculo::truncate();.
    2. Y, a continuación, añadimos el siguiente código:
          foreach( self::$arrayCurriculos as $curriculo ) {
              $curri = new Curriculo;
              $curri->user_id = $curriculo['user_id'];
              $curri->video_curriculum = $curriculo['video_curriculum'];
              $curri->texto_curriculum = $curriculo['texto_curriculum'];
              $curri->save();
          }
  4. Por último, tendremos que ejecutar el comando de Artisan que procesa las semillas y, una vez realizado, comprobaremos que se rellenado la tabla curriculos con el listado de curriculos.

Si te aparece el error "Fatal error: Class 'Curriculo' not found" revisa si has indicado el espacio de nombres del modelo que vas a utilizar (use App\Models\Curriculo;).

Ejercicio 4 - Uso de la base de datos

En este último ejercicio, vamos a actualizar los métodos del controlador CatalogController para que obtengan los datos desde la base de datos. Seguiremos los siguientes pasos:

  1. Modificar el método getIndex() para que obtenga toda la lista de curriculos desde la base de datos usando el modelo Curriculo y que se pase a la vista ese listado.
  2. Modificar el método getShow() para que obtenga el curriculo pasado por parámetro usando el método findOrFail() y se pase a la vista dicho curriculo.
  3. Modificar el método getEdit() para que obtenga el curriculo pasado por parámetro usando el método findOrFail() y se pase a la vista dicho curriculo.

Si al probarlo te aparece el error Class 'App\Http\Controllers\Curriculo' not found revisa si has indicado el espacio de nombres del modelo que vas a utilizar (use App\Models\Curriculo;).

Ya no necesitaremos más el array de curriculos ($arrayCurriculos) que habíamos puesto en el controlador, así que lo podemos eliminar.

Ahora tendremos que actualizar las vistas para que, en lugar de acceder a los datos del array, los obtenga del objeto con el curriculo. Para esto, cambiaremos en todos los sitios donde hayamos puesto $curriculo['campo'] por $curriculo->campo.

Además, en la vista catalog/index.blade.php, en vez de utilizar el índice del array ($key) como identificador para crear el enlace a catalog/show/{id}, tendremos que utilizar el campo id del curriculo ($curriculo->id). Lo mismo en la vista catalog/show.blade.php, para generar el enlace de editar curriculo tendremos que añadir el identificador del curriculo a la ruta catalog/edit.

DonHonorio commented 11 months ago

Profe, pone CatalogController y es Curriculo image

albsierra commented 11 months ago

Solucionado.

Como se trata de un error proveniente de la documentación, habría sido más conveniente, crear un nuevo issue.

Gracias de todas formas.