Cuando comenzamos a crear nuestra pequeña aplicación de juegos, configuramos un formulario para agregar juegos al sistema. También configuramos un formulario para agregar reseñas de juegos en el sistema. Pudimos establecer las relaciones entre juegos y reseñas. Todo esto se hizo como un sistema estrictamente basado en invitados, ya que no teníamos un sistema de autenticación de usuarios hasta hace poco. Ahora que contamos con un sistema de registro de usuarios, necesitamos encontrar una manera de asociar a los usuarios con juegos y reseñas. Un usuario puede enviar uno o más juegos al sitio. Un usuario también puede enviar una o más reseñas de cualquier juego. Podemos abordar las relaciones de usuario a juego y revisión en este tutorial.


Actualizar migraciones

Ahora mismo tenemos una mesa de juegos y una tabla de reseñas en la base de datos que contiene toda la información sobre, lo adivinaste, juegos y reseñas. Lo que falta en esas tablas es una forma de vincular un registro en particular a un usuario en particular. Para facilitar esto, necesitamos algo como un campo user_id en ambas tablas. Podemos actualizar esas migraciones y actualizar ahora.


base de datos / migraciones / xxxx_xx_xx_xxxxxx_create_games_table


base de datos / migraciones / xxxx_xx_xx_xxxxxx_create robust_table

Es hora de actualizar las migraciones. Como sabemos, perderemos todos los juegos, reseñas y ahora los usuarios de nuestra base de datos cuando hagamos esto. Hay formas de configurar una migración para alterar una tabla MySql en lugar de eliminarla y reconstruirla, pero realmente no tenemos que preocuparnos por eso aquí. Así que aquí no pasa nada.
migrar y actualizar la base de datos


Actualizar modelos

Para asociar un usuario con un juego o revisión, necesitamos actualizar esos modelos. Cada uno de ellos necesitará un nuevo método para adjuntar un envío de juego a un usuario y un envío de revisión a un usuario. En otras palabras, un juego pertenecerá a un usuario y una revisión también pertenecerá a un usuario. Usaremos la relación pertenece a () para esto. Aquí están esos modelos actualizados.


aplicación / Game.php


app / Review.php

También podemos actualizar el modelo de usuario. Esto se debe a que un usuario puede tener muchos envíos de juegos y también puede tener muchos envíos de reseñas. Para esto, usaremos la relación hasMany () .


aplicación / User.php


Actualizar controladores

También necesitaremos actualizar nuestros controladores, y específicamente necesitamos actualizar los métodos store () en ellos. Esto se debe a que antes, cuando guardábamos un juego o una reseña en la base de datos, nunca contabilizamos al usuario que envió el juego o la reseña. No necesitábamos incluir eso antes, porque cualquier persona anónima podía visitar uno de los formularios, sin ningún tipo de autenticación, y enviar un juego o una reseña. Ahora que tenemos un sistema de registro de usuarios, queremos rastrear qué usuario que inició sesión envió qué juego o qué revisión a la base de datos. Para esto, necesitaremos dar cuenta del user_id del usuario autenticado (conectado) cuando se activa el método store () .


aplicación / Http / Controllers / GamesController.php

Observe arriba que ahora estamos almacenando el iddel usuario que inició sesión en el campo user_id de la tabla de juegos antes de guardar el modelo. Obtenemos la identificación del usuario con auth () -> id () . Muy bien.


aplicación / Http / Controllers / ReviewsController.php

Esta actualización del método store () es un poco más curiosa. Recuerde que habíamos extraído un método al modelo de Juego, y ahí es donde realmente almacenamos la reseña usando una relación. Cuando llamamos addReview () aquí en ReviewsController, estábamos pasando el cuerpo del formulario para agregar una revisión a través de request ('body') . Ahora también necesitamos pasar la identificación del usuario como segundo parámetro, y eso es exactamente lo que hicimos a través de auth () -> id () . Por supuesto, esto significa que ahora también debemos actualizar el método addReview () en el modelo Game. Sigamos adelante y hagamos eso ahora.


aplicación / Game.php

¡Agradable! Observe que el método addReview () ahora acepta ese segundo argumento , que a su vez se pasa como segundo argumento al método create () como segundo elemento de la matriz. Ahora, el método create () hace uso de la asignación masiva, y recuerde que ya hemos establecido bodygame_idcomo rellenable en el modelo Review. Bueno, adivina qué, sí, es cierto, ahora también debemos agregar el campo de user_ida la propiedad rellenable en el Modelo de revisión, de lo contrario, este refactor anterior fallará cuando vayamos a agregar una revisión. Podemos actualizar el modelo de revisión así ahora.


app / Review.php


Actualizar vistas

¡Okay! La mayor parte del trabajo de piernas está fuera del camino. Ahora podemos actualizar nuestros archivos de vista para que cuando se envíe un juego, veamos al usuario que lo envió. Además, cualquier revisión agregada también mostrará qué usuario envió la revisión. En primer lugar, sin embargo, agreguemos un enlace en el área de navegación solo para los usuarios registrados, para que puedan enviar un nuevo juego.

Agregar un enlace Enviar juego a la barra de navegación


recursos / vistas / parciales / navbar.blade.php

Muestra el nombre de usuario de un juego enviado al enumerar todos los juegos

Cuando el usuario enumera todos los juegos, ahora podemos incluir el nombre de cada usuario que envió cada juego. Solo necesitamos actualizar que se index.blade.phpencuentra en resources / views / games / index.blade.php e incluir una llamada a $ game-> user-> name .


recursos / vistas / juegos / index.blade.php

Muestra el nombre de usuario de un juego enviado y el nombre de usuario de una revisión enviada

Ahora también podemos actualizar la vista resources / views / games / show.blade.php para incluir el nombre del usuario que envió el juego que se muestra, además de mostrar el nombre asociado con las reseñas de ese juego. Podemos hacer uso de $ game-> user-> name para mostrar al usuario que envió un juego, y $ review-> user-> name para mostrar al usuario que envió una reseña. Así es como podemos actualizar el show.blade.phparchivo para que esto funcione.


recursos / vistas / juegos / show.blade.php


Prueba de agregar juegos y reseñas

Ahora podemos probar el inicio de sesión como un usuario específico y enviar un juego o revisión. Deberíamos encontrar que $ game-> user-> name ahora nos mostrará qué usuario envió un juego. Para reseñas de juegos, $ review-> user-> name debe indicarnos qué usuario escribió la reseña. Además, auth () -> usuario () -> nombre nos mostrará qué usuario está conectado actualmente. Ahora iniciaremos sesión como usuario "Toad" y enviaremos un juego. Veamos cómo funciona esto.

sapo enviado super mario bros

¡Bingo! Ahora podemos cerrar sesión, luego iniciar sesión como usuario “Luigi” y dejar una reseña sobre el juego Super Mario Bros.
luigi deja una reseña sobre el juego que Todd envió

Ahora podemos cerrar la sesión, luego volver a iniciarla como "Mario" y también dejar una reseña. En ese punto, deberíamos ver que hemos iniciado sesión como Mario , que el juego fue enviado por Toad , hay una revisión de Luigi y ahora podemos agregar otra revisión de Mario.
Mario deja su propia reseña del juego


Los usuarios pueden agregar juegos y resumen de reseñas

¡¿Qué tan genial es esta pequeña aplicación ahora ?! Al principio, de esta serie todo lo que teníamos eran un par de rutas, y no mucho más. Hemos recorrido un largo camino hasta el punto de tener usuarios que pueden registrarse, iniciar sesión, cerrar sesión, enviar nuevos juegos y enviar nuevas reseñas. A medida que los usuarios envían juegos y reseñas al sitio, nuestras relaciones de Eloquent nos muestran exactamente qué usuario envió qué juego o reseña. ¡Muy genial!