45 CRUD (UPDATE) actualizando datos y reemplazando la imgen con (LARAVEL y MYSQL)FULLSTACK

Duración: 17 min
Módulo: 🔄 Módulo CRUD: Actualización y Eliminación Lección 2 de 4

Descripción

💾 Lección 45: CRUD (UPDATE) Actualizando Datos y Reemplazando la Imagen con Laravel

Esta lección avanzada es la culminación de la función de Actualización (Update), enfocándose en la lógica del backend para procesar los datos del formulario de edición, manejar el cambio de método HTTP y, lo más importante, reemplazar correctamente la imagen antigua por la nueva para optimizar el espacio en el servidor.

1. 🔄 Configuración del Formulario para el Método PATCH [03:24]

El primer paso es asegurar que el formulario de edición (edit.blade.php) envíe la solicitud al controlador con el método HTTP correcto.

  • Método HTTP Estándar: Laravel, siguiendo las convenciones RESTful, utiliza los métodos PUT o PATCH para las operaciones de actualización, no el método POST estándar de HTML [03:33].
  • Método PATCH en Formulario: Para simular el método PATCH dentro de un formulario HTML (que solo soporta GET y POST), se utiliza una directiva de Blade:

    HTML

    @method('PATCH')

  • Envío del ID: La URL del formulario se actualiza para incluir el ID del registro que se está actualizando [04:18]:

    HTML

    <form action="{{ url('admin/peliculas/' . $pelicula->id) }}" method="POST" enctype="multipart/form-data">

2. 📝 Lógica del Controlador (PeliculasController — Función update) [04:49]

El método update($request, $id) se configura para recibir los datos del formulario ($request) y el ID del registro a modificar.

  • Recepción de Datos y Búsqueda: Se busca la instancia del modelo existente usando el ID recibido, lo que garantiza que se actualice el registro correcto en lugar de crear uno nuevo.

    PHP

    $pelicula = Pelicula::findOrFail($id);

  • Validación: Se mantiene la validación de los campos de texto, pero se elimina el required para el campo de la imagen. Es crucial que la imagen no sea requerida en la edición, ya que el usuario puede querer actualizar solo el texto y mantener la portada actual [07:29].
  • Actualización de Campos de Texto: Se asignan los nuevos valores ($request->campo) a las propiedades del objeto $pelicula.
  • Guardado: Finalmente, se invoca el método save() sobre el objeto, lo que aplica la actualización a la base de datos [06:21].

3. 🖼️ Gestión Inteligente del Reemplazo de Imágenes [11:18]

Se introduce la lógica condicional y de eliminación para manejar las imágenes correctamente y evitar la acumulación de archivos basura en el servidor.

  • Problema sin Solución Condicional: Si el usuario no selecciona una nueva imagen, el código de subida intentaría guardar un archivo vacío, lo que resultaría en un error de servidor [08:00].
  • Solución (Condición de Existencia): Se utiliza una sentencia if para verificar si existe un nuevo archivo en el campo de imagen antes de intentar procesarlo [12:05].

    PHP

    // Si existe una nueva imagen en el formulario: if ($request->hasFile('imagen_p')) {    // ... (Lógica de reemplazo) }

  • Reemplazo y Eliminación del Archivo Antiguo: Dentro de la condición if, se sigue la lógica correcta de reemplazo [14:09]:
    1. Eliminar: Se utiliza la facade Storage para eliminar el archivo antiguo del servidor (la ruta almacenada en el campo $pelicula->imagen_p).

      PHP

      Storage::delete('public/' . $pelicula->imagen_p);

    2. Subir Nuevo: Se llama al método store() para subir el nuevo archivo y obtener su nueva ruta.
    3. Actualizar DB: La nueva ruta se asigna al campo $pelicula->imagen_p, sobrescribiendo la ruta antigua.
  • Resultado: El registro se actualiza con la nueva imagen y, lo más importante, el archivo de la portada anterior se borra del servidor, manteniendo el sistema limpio y optimizado [16:20].

4. 🔜 Próximo Paso [17:29]

Habiendo completado la creación, lectura y actualización, la siguiente y última lección se enfocará en la función de Eliminación (Destroy) para completar el ciclo de vida del CRUD.