Home > Mobile >  Laravel: Updating multiple files in array
Laravel: Updating multiple files in array

Time:09-17

I was able to store and save multiple files in the array into the database, as well as updating the form data. However, the problem now is it returns this error when I update the form without updating the file.

count(): Parameter must be an array or an object that implements Countable

Does anyone know what should I do for my update function or value in my blade file so that it won't delete the file elements?

--------------------------------------------- UPDATED ---------------------------------------------

public function update(Request $request, $id)
{        
    $data = $request->all();
    $data = $this->saveEmptyData($data);

    $c = Document::find($id);
    $fileData = [];

    if(count($request->file)>0)
    {
        foreach($request->file as $file)
        {    
            $path = public_path('storage/documents');
            $fileName = time().'_'.$file->getClientOriginalName();
            $file->move($path, $fileName);

            if ($c->file)
            {
                File::delete($path.'/'.json_decode($c->file)[0]);
            }
            $fileData[] = $fileName;
        }
        $doc = json_encode($fileData);
        $c->file = $doc;
        
        $c->name = $request->name;
        $c->price = $request->price;
        $c->publish = $request->publish;
    } 
    //else {
    //    redirect()->back()->with('errors', 'File is required!');
    //}
    $c->save();

    return redirect()->route('product.index')->with('success', 'Document updated successfully');
}

Blade

<form method="POST" action="{{ route('document.update', $doc) }}" enctype="multipart/form-data">
    <fieldset>
        ....
        <div class="form-group">
            <label>Document</label>
            <div class="input-group-append">
                <label for="upload_file">Upload</label>
                <input id="upload_file" type="file" name="file[]" value="{{ isset($doc) ? $doc['file'] : '' }}" multiple>
            </div>
        </div>
    </fieldset>
</form>

CodePudding user response:

 if(count($request->file)>0)
 {
   foreach($request->file as $file)
   { 
      $path = public_path('documents/');
      $fileName = time().'_'.$file->getClientOriginalName();
      $file->move($path, $fileName);

      if ($c->file)
      {
         File::delete($path.'/'.json_decode($c->file)[0]);
      }

      $fileData[] = $fileName;
   }
   $doc= json_encode($fileData); //replace $doc['file'] with $doc
   $c->file=$doc;
 }

$c->save();
//not required to declare $fileData ;

CodePudding user response:

enctype="multipart/form-data" in form tag

if(count($request->file)>0)
{
    foreach($request->file as $file)
    { 
        $path = public_path('documents/');
        $fileName = time().'_'.$file->getClientOriginalName();
        $file->move($path, $fileName);

        if ($c->file)
        {
            File::delete($path.'/'.json_decode($c->file)[0]);
        }

        $fileData[] = $fileName;
    }
    $doc['file'] = json_encode($fileData);
}
  • Related