2 votes

Télécharger plusieurs fichiers dans des attributs différents

Comment télécharger plusieurs fichiers sélectionnés dans différents attributs tels que pic_1, pic_2, pic_3 dans MYSQL

Vues

Contrôleur

  $this->validate($request, [
            'carEvidence' =>  'required|mimes:jpeg,png,jpg,zip,pdf|max:2048',
        ]);
 $post = new Cars;
 if ($files = $request->file('carEvidence')) {
            $destinationPath = 'public/image/'; // chemin de téléchargement
            $profileImage = date('YmdHis') . "." . $files->getClientOriginalExtension();
            $files->move($destinationPath, $profileImage);
            $post['carEvidence'] = "$profileImage";
        }
$post->save();
        return redirect('/internalaudit')->with('success', "A été envoyé pour validation");

7voto

Rashed Hasan Points 532

Je pense que différents attributs tels que pic_1, pic_2, pic_3 pour votre table unique cars vous posent problème pour gérer les fichiers. Ma suggestion est de le faire en utilisant une relation. Ainsi, vous stockez des informations sur les voitures dans votre table cars. Et chaque voiture peut avoir plusieurs images à afficher en tant que preuve de la voiture. Dans cette situation, il serait préférable de créer une autre table telle que car_evidence avec deux colonnes dans cette table nommées cars_id et car_images. Ensuite, créez une relation entre eux. Si vous faites cela, vous pourrez soumettre autant d'images de voitures que vous le souhaitez de manière dynamique. Les attributs pic_1, pic_2, pic_3 ne sont pas la meilleure solution. Veuillez consulter mon processus - Votre modèle Cars.php -

class Cars extends Model
{
    protected $primaryKey = 'cars_id';

    protected $fillable = [
        //les autres champs de votre table cars
    ];

    public function carevidence()
    {
        return $this->hasMany('App\CarEvidence', 'cars_id', 'id');
    }
}

Créez un nouveau modèle CarEvidence avec une migration en exécutant php artisan make:model CarEvidence -m. Ensuite, à l'intérieur de ce fichier de migration, ajoutez simplement deux colonnes comme ceci -

$table->bigInteger('cars_id')->unsigned()->nullable();
$table->string('car_images');

Votre modèle CarEvidence.php devrait ressembler à -

class CarEvidence extends Model
{
    protected $fillable = [
        'cars_id', 'car_images',
    ];

    public function car(){
        return $this->belongsTo('App\Cars', 'cars_id', 'id');
    }
}

Le formulaire est -

    @csrf
    // vos autres champs d'entrée concernant les informations sur la voiture ici, je pense s'il y en a

    Enregistrer

Web.php

Route::post('/votre-action-de-formulaire-url-ici', 'VotreControllerIci@VotreMéthodeIci');

Et ensuite dans votre méthode du contrôleur -

public function VotreMéthodeIci(Request $request){
    $this->validate($request, [
             'carEvidence.*' => 'required|mimes:jpeg,png,jpg,gif,svg|max:2048',
            ]);

     $post = new Cars;
     //$post->carEvidence = "yes"; ici, d'autres informations sur la voiture à enregistrer dans la table `cars`
     if ($post->save()) {
          if($request->hasFile('carEvidence')){
             $files = $request->file('carEvidence');
             foreach($files as $file){
                 $extension = $file->getClientOriginalExtension();
                 $filename =time().'.'.$extension;
                 $file->move(public_path('/image'), $filename);
                 CarEvidence::create([
                    'cars_id' => $post->id,
                    'car_images' => $filename
                 ]);
              }
          }
      }

  return redirect('/auditinterne')->with('success', "A été envoyé pour être validé");
}

Et, enfin lors du retour de votre fichier blade

public function nomdeméthode()
{
$cars = Cars::with('carevidence')->get();
return view('votre-fichier-blade-vue', compact('cars'));
}

Ensuite, dans votre-fichier-blade-vue pour obtenir les images de voiture (preuves), vous pouvez utiliser une boucle foreach imbriquée -

@if (session('success'))
    {{ session('success') }}
@endif
@if ($errors->any())

             @foreach ($errors->all() as $error)
             {{ $error }}
             @endforeach

@endif

@foreach($cars as $car)
    {{ $car->vos-champs-de-la-table-cars }}
          //et obtenir toutes les images pertinentes pour la voiture comme ceci
          @foreach($car->carevidence as $evidence)

          @endforeach
@endforeach

J'espère que cela vous aidera !

1voto

ollieread Points 2130

Fournir simplement l'attribut multiple pour des éléments comme celui-ci ne suffit pas. Lorsque vous créez un type d'entrée multiple, que ce soit file, select ou même input, vous devez suffixer le nom avec [], donc dans votre exemple, le champ serait :

À partir de là, vous pouvez les parcourir et les télécharger correctement.

1voto

farooq Points 1287

En plus de la réponse de @ollieread, vous pouvez boucler à travers le tableau pour stocker l'image ou tout autre fichier téléchargé dans la base de données ou ailleurs. Pour obtenir des fichiers en tant que multiples,

Ensuite, dans votre fichier contrôleur, utilisez la boucle for pour obtenir chaque fichier individuel.

$post = new Cars;
    if ($files = $request->file('carEvidence')) {
        foreach ($request->file('carEvidence') as $file) {
            $destinationPath = 'public/image/'; // chemin de téléchargement
            $profileImage = date('YmdHis') . "." . $file->getClientOriginalExtension();
            $file->move($destinationPath, $profileImage);
            $post['carEvidence'] = "$profileImage";
        }
    }
    $post->save();

Simple. Essayez et faites-moi savoir.

1voto

hitesh Points 193

Suivez comme ce code : dans le fichier View -

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X