universal
universal

Reputation: 467

Laravel update - Image uploaded file path not stored in database

I have a table with multiple fields as below.

Image Fields

When I update the form, only large_image field is updated, thumbnail_image is not updated.

My form

<form action="/update', $id)}}" enctype="multipart/form-data" method="post" files="true">
<input type="text" name="name">  
<input type="file" name="large_image" multiple="false" accept="image/x-png, image/jpeg">
<input type="file" name="thumb_image" multiple="false" accept="image/x-png, image/jpeg">
<input type="submit">

Model

class Item extends Model {
protected $fillable = ['name', 'large_image', 'thumb_image'];
}

Controller

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

$item= Item::findOrFail($id);
if ($request->hasFile('large_image')) 
  {
    $fileName = $request->file('large_image')->getClientOriginalName();
    $fileExt = $request->file('large_image')->getClientOriginalExtension();
    $fullFileName = $fileName.'_'.time().'.'.$fileExt;

    $path = public_path('images');
    Image::make($fileName)->save($path . DIRECTORY_SEPARATOR. $fullFileName);

    $requestData['large_image'] = "images/{$fullFileName}";
    }



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

        {
            $file_thumb = $request->file('thumb_image')->getClientOriginalName();

            $file_thumb_Ext = $request->file('thumb_image')->getClientOriginalExtension();
            $fullfile_thumb = $file_thumb.'_'.time().'.'.$filethumb_Ext;

            $path_thumb = public_path('images/thumb');

            Image::make($file)->save($path_thumb . DIRECTORY_SEPARATOR. $fullfile_thumb);
        }
        $requestData['thumb_image'] = "images/thumb/{$fullfile_thumb}";

    }


   $item->update($requestData);
}

What I am missing here? But both images are uploaded and image paths are written in database in create method.

Upvotes: 0

Views: 1817

Answers (2)

Jinandra Gupta
Jinandra Gupta

Reputation: 545

Model

Replace thumb_image by thumbnail_image as you have column name in table thumbnail_image

class Item extends Model {
   protected $fillable = ['name', 'large_image', 'thumbnail_image'];
}

Controller

Same do in controller replace key value thumb_image by thumbnail_image as you have column name in table thumbnail_image

Replace

$requestData['thumb_image']

by

$requestData['thumbnail_image']

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

$item= Item::findOrFail($id);
if ($request->hasFile('large_image')) 
  {
    $fileName = $request->file('large_image')->getClientOriginalName();
    $fileExt = $request->file('large_image')->getClientOriginalExtension();
    $fullFileName = $fileName.'_'.time().'.'.$fileExt;

    $path = public_path('images');
    Image::make($fileName)->save($path . DIRECTORY_SEPARATOR. $fullFileName);

    $requestData['large_image'] = "images/{$fullFileName}";
    }



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

        {
            $file_thumb = $request->file('thumb_image')->getClientOriginalName();

            $file_thumb_Ext = $request->file('thumb_image')->getClientOriginalExtension();
            $fullfile_thumb = $file_thumb.'_'.time().'.'.$filethumb_Ext;

            $path_thumb = public_path('images/thumb');

            Image::make($file)->save($path_thumb . DIRECTORY_SEPARATOR. $fullfile_thumb);
        }
        $requestData['thumbnail_image'] = "images/thumb/{$fullfile_thumb}";

    }


   $item->update($requestData);
}

Hope this work for you.

Upvotes: 1

Adam Kozlowski
Adam Kozlowski

Reputation: 5896

Your model is:

class Item extends Model {
    protected $fillable = ['name', 'large_image', 'thumb_image'];
}

Look now at your database, the column name is different, so model should look like this:

class Item extends Model {
    protected $fillable = ['name', 'large_image', 'thumbnail_image'];
}

Good luck!

Upvotes: 0

Related Questions