Загрузить несколько файлов в другом атрибуте - PullRequest
1 голос
/ 24 сентября 2019

Как загрузить несколько выбранных файлов с различными атрибутами, такими как pic_1, pic_2, pic_3 в MYSQL

Просмотры

 <input type="file" name="carEvidence" multiple>

Контроллер

  $this->validate($request, [
            'carEvidence' =>  'required|mimes:jpeg,png,jpg,zip,pdf|max:2048',
        ]);
 $post = new Cars;
 if ($files = $request->file('carEvidence')) {
            $destinationPath = 'public/image/'; // upload path
            $profileImage = date('YmdHis') . "." . $files->getClientOriginalExtension();
            $files->move($destinationPath, $profileImage);
            $post['carEvidence'] = "$profileImage";
        }
$post->save();
        return redirect('/internalaudit')->with('success', "Has been sent for Validation");

Ответы [ 4 ]

2 голосов
/ 27 сентября 2019

Я думаю, different attribute such as pic_1,pic_2,pic_3 для вашей cars единственной таблицы затруднит работу с файламиЯ предлагаю сделать это, используя relationship.Если это так, вы храните некоторую информацию об автомобилях в своей таблице cars.И каждая машина может иметь несколько изображений для показа в качестве доказательства автомобиля.В этой ситуации было бы лучше, если бы вы создали другую таблицу, например car_evidence, чтобы в этой таблице было два столбца с именами cars_id и car_images.Затем установите отношения между ними.Если вам это нравится, то вы можете динамически отправлять больше изображений автомобилей. pic_1, pic_2, pic_3 атрибуты не лучше.Пожалуйста, посмотрите на мой процесс - Ваша Cars.php модель -

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

    protected $fillable = [
        //your cars table's other fields
    ];

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

Создайте новую модель CarEvidence с миграцией, запустив php artisan make:model CarEvidence -m.Затем, внутри этого файла миграции, просто добавьте две columns, как это -

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

Ваша CarEvidence.php модель должна выглядеть так:

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

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

Формаэто -

<form action="your-route-or-url-here" method="post" enctype="multipart/form-data">
    @csrf
    //your other input fields about car information here, I think if any
    <input type="file" name="carEvidence[]" multiple>
    <button type="submit">Save</button>
</form>

Web.php

Route::post('/your-form-action-url-here', 'YourControllerHere@YourMethodHere');

И затем в вашем методе контроллера -

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

     $post = new Cars;
     //$post->carEvidence = "yes";here other information about car to save in `cars` table
     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('/internalaudit')->with('success', "Has been sent for Validation");
}

И, наконец, во время возвратаВаш файл лезвия

public function yourmethodname()
{
$cars = Cars::with('carevidence')->get();
return view('your-view-blade-file', compact('cars'));
}

Затем внутри your-view-blade-file, чтобы получить изображения автомобилей (доказательства), вы можете использовать вложенную петлю foreach -

@if (session('success'))
    <div class="alert alert-success">{{ session('success') }}</div>
@endif
@if ($errors->any())
    <div class="alert alert-danger">
         <ul>
             @foreach ($errors->all() as $error)
             <li>{{ $error }}</li>
             @endforeach
         </ul>
    </div>
@endif


@foreach($cars as $car)
    <p>{{ $car->your-fields-from-cars-table }}</p>
          //and get all relevant images for car by this
          @foreach($car->carevidence as $evidence)
            <img src="{{ asset('image/'.$evidence->car_images) }}" height="60px" width="60px" />
          @endforeach
@endforeach

Надеюсь, это поможет вам!

1 голос
/ 24 сентября 2019

В дополнение к ответу @ollieread, вы можете перебрать массив, чтобы сохранить изображение или любой другой загруженный файл в базе данных или где угодно.Чтобы получить несколько файлов,

<input type = "file" name = "carEvidence[]" multiple>

Затем в файле вашего контроллера используйте for loop, чтобы получить все файлы.

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

Простой.Попробуйте и дайте мне знать.

1 голос
/ 24 сентября 2019

следуйте как этот код: в Просмотр файла - <input type="file" name="carEvidence[]" multiple>

1 голос
/ 24 сентября 2019

Простое предоставление атрибута multiple для таких элементов, как это, не все, что вам нужно.При создании типа с несколькими входами, будь то file, select или даже input, вам необходимо добавить суффикс имени к [], поэтому в вашем примере поле будет:

<input type="file" name="carEvidence[]" multiple>

Оттуда вы можете просмотреть их и загрузить их соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...