Contenido del curso

Manos a la obra con nuestro proyecto

Guardar registros con relaciones en Laravel

Resumen

Crear un nuevo registro en Laravel implica más que enviar un formulario: necesitas configurar el método store, definir relaciones entre entidades y habilitar la asignación masiva. Aprenderás a guardar publicaciones asociadas a un usuario logueado y redirigir a la vista de edición, paso a paso, siguiendo los errores que el propio framework te muestra.

¿Por qué falla el método store al enviar el formulario?

Cuando envías un formulario sin haber declarado el método correspondiente en el controlador, Laravel lanza un error claro: el método no existe. Y eso, lejos de ser un problema, es tu mejor guía.

Al probar el formulario con valores como A y B, el sistema responde que store no está definido. Ese error es la señal para empezar a construir la lógica de guardado. Copias la estructura base del controlador, la renombras a store y recibes la información del usuario mediante la clase de request.

¿Qué hace el método store en Laravel? Es el método que recibe los datos enviados por un formulario y los persiste en la base de datos. Por convención, se invoca cuando haces un POST a una ruta de creación.

¿Cómo asocio una publicación al usuario logueado?

La publicación no se crea de forma aislada: se crea desde el usuario que está autenticado en ese momento. Esa información ya vive dentro de la request.

Escribes algo como $request->user()->publicaciones()->create([...]), donde publicaciones() es el método de relación que aún no existe. Dentro del create pasas tres campos:

  • titulo, que tomas directamente del formulario.
  • url_amigable, que generas con Str::slug($titulo).
  • body, que también viene del formulario.

Para usar Str::slug necesitas importar la clase con use Illuminate\Support\Str;. Conviene ordenar los use alfabéticamente: primero los tuyos, luego los del framework, manteniendo R antes que S.

Después del guardado, defines una redirección a la ruta de edición pasando el registro recién creado como parámetro. Así el usuario aterriza en la vista correcta justo después de guardar.

¿Cómo defino la relación hasMany entre usuario y publicaciones?

Al actualizar, el siguiente error que aparece dice que el método no está definido. Eso significa que la relación entre el usuario y sus publicaciones aún no existe en la entidad.

Entras al modelo de usuarios, vas al final y declaras un método llamado publicaciones, en plural, porque un usuario puede tener muchas. La configuración es directa:

php public function publicaciones() { return $this->hasMany(Publicacion::class); }

Con hasMany le dices a Laravel que un usuario está vinculado a múltiples registros de la entidad Publicacion. Es la forma estándar de modelar relaciones uno a muchos en Eloquent.

¿Qué significa hasMany en Eloquent? Es la relación que indica que un modelo padre puede tener varios hijos. Un usuario tiene muchas publicaciones, pero cada publicación pertenece a un único usuario.

¿Por qué Laravel bloquea la asignación masiva y cómo la habilito?

Resuelta la relación, aparece otro error: el sistema no permite la mass assignment porque la propiedad no está declarada como asignable. Es una protección por defecto de Eloquent contra escrituras no controladas.

Estás enviando tres campos —título, URL amigable y body— y ninguno está autorizado en el modelo Publicacion. La solución es replicar la configuración que ya existe en el modelo de usuario y pegarla en publicaciones, declarando la propiedad $fillable con los tres campos:

  • titulo.
  • url_amigable.
  • body.

Con esa lista, Eloquent acepta crear el registro pasando un array asociativo, sin que cada campo tenga que asignarse manualmente.

¿Qué es la asignación masiva en Laravel? Es la capacidad de crear o actualizar un registro pasando un array de datos en una sola línea. Para evitar inyecciones no deseadas, Laravel exige declarar qué columnas son asignables mediante la propiedad $fillable.

¿Cómo verifico que el flujo de creación funciona de extremo a extremo?

Después de declarar $fillable, vuelves al formulario, escribes un título y un body, envías, y el sistema redirige a la vista de editar. Al hacer clic en volver, encuentras el nuevo registro en el listado, listo para eliminarse o editarse.

El proceso completo se sostiene en una idea: dejar que los errores del framework te guíen. Primero el método inexistente, luego la relación faltante, después la asignación masiva bloqueada. Cada error es una pista que apunta exactamente al siguiente paso.

Con esto ya tienes la función de crear un nuevo registro funcionando. La siguiente pieza del rompecabezas es configurar la edición, y para eso necesitas tener este flujo bien afianzado. ¿Hasta qué punto del proceso lograste avanzar? Cuéntame en los comentarios qué error de Laravel te ayudó más a entender la lógica.