Subir varias imagenes en Laravel 11.x

Publicado por Robert_cdp
hace 1 día

Hola estoy realizando la subida de multiples imagenes, sin embargo asi es como lo tengo actualmente.

$product = Product::create([
                'category_id' => $request->input('category_id'),
                'name' => $request->input('product_name'),
                'slug' => Str::slug($request->input('product_name')),
                'description' => $request->input('product_description'),
                'status' => $request->input('status'),
                'retail_price' => $request->input('retail_price'),
                'discount_price' => $request->input('discount_price'),
                'wholesale_price' => $request->input('wholesale_price'),
                'min_stock' => $request->input('min_stock'),
            ]);

            if ($request->hasFile) {
                $files = $request->file('images');

                foreach ($files as $file) {

                    $filename = $file->getClientOriginalname();
                    $filepath = $file->storeAs('images/products', $filename, 'public');

                    ProductImage::create([
                        'product_id' => $product->id,
                        'file_path' => $filepath,
                        'file_name' => $filename,
                    ]);
                }
            }

            return redirect()->back()->with('success', 'Guardado correctamente.');

alguna forma de mejorarlo?

Laravel 11.x
Respuesta de Cristian Olaz
hace 1 hora

Hola Roberto,

A mi me parece bien en general. Pero te dejo 3 pequeñas correcciones que podrías hacer:

1: Hacer la validación tanto del producto como de los archivos

2: El hasFile no tiene parámetros:

if ($request->hasFile("images")) {

3: Al guardar la imagen, el problema que veo es que si el usuario sube 2 archivos con el mismo nombre entonces el segundo va a sobreescribir al primero. Quizá el $filename podría ser un string random (\Str::random()) o un hash. En ese caso tendrías que guardar ese filename en la tabla ProductImage

Por último, esto es más una cuestión de preferencia, yo en general prefiero tener 2 métodos separados: uno para subir los archivos y otro para guardar la información del producto. El primero retornaría el ID del archivo que luego podés incluir en el segundo. De ese modo me parece un poco más fácil hacer las validaciones.

Espero que te sirva

Saludos!,