Search code examples
phplaravellaravel-9

Laravel9 : update method doesn't work(controller)


I would like to ask you that update method doesn't work with my code in controller on Laravel.

I want to do is updating information that are required

As details of code below, I want to update "Shop Information" and I tried:

  1. adding $id inside brackets

now, it is "public function update(Request $request, $id)"

  1. using "if" to make conditional branch that it is requested or not.

    {   
        $requestData = Shop::find($id);
        $requestData->name = $request->name;
        if(empty($request->email)){
            $request->email = NULL;
        } else {
            $requestData->email = $request->email;
        }
    
        if(empty($request->description)){
            $request->description = NULL;
        } else {
            $requestData->description = $request->description;
        }
    
        if($request->hasFile('image')){
        $fileName = $request->file('image')->getClientOriginalName();
        $path = $request->file('image')->storeAs('shops', $fileName, 'public');
        $requestData['image'] = '/storage/shops'.$path;
        }
    
        $requestData->update();
        return redirect()->route('shops');
    }
    
    

Solution

  • The update() method expects an array as an argument. You should make use of the save() method instead. Also you should not have those if statements since you are not validating your input.

    That being said, your code should be like this instead:

    public function update(Request $request, $id) {   
      $requestData = Shop::find($id);
      $requestData->name = $request->name;
      $requestData->email = $request->email;
      $requestData->description = $request->description;
      
      if($request->hasFile('image')){
        $fileName = $request->file('image')->getClientOriginalName();
        $path = $request->file('image')->storeAs('shops', $fileName, 'public');
        $requestData['image'] = '/storage/shops'.$path;
      }
    
      $requestData->save();
      return redirect()->route('shops');
    }