【问题标题】:Laravel 5.4 - Updating a File recordLaravel 5.4 - 更新文件记录
【发布时间】:2017-08-18 14:19:58
【问题描述】:

我对 Laravel 很陌生,因此我正在尝试学习一些基础知识。我设法通过文件上传创建了一个 CRUD。我所做的是创建了一个资源控制器。我的存储方法:

public function store(Request $request) {

        $this->validate($request, [
            'name' => 'required',
            'avatar' => 'required|image|mimes:jpeg,png,jpg,gif,svg',
            'boat_type' => 'required',
            'rooms' => 'required',
            'price_per_hour' => 'required',
            'price' => 'required',
        ]);
        $boat = new Boat($request->input()) ;
            if($file = $request->hasFile('avatar')) {
                $file = $request->file('avatar') ;
                $fileName = $file->getClientOriginalName() ;
                $destinationPath = public_path().'/img/boats/avatars/' ;
                $file->move($destinationPath,$fileName);
                $boat->avatar = $fileName ;
            }
            $boat->save() ;
            return redirect()->route('management.index')
                        ->with('success','New Boat Successfully Added!');
    }

这个方法工作得很好,我可以上传详细信息并将其存储到我的数据库中,并且可以在我的视图中对其进行操作。

但是当我尝试使用 UPDATE 方法时,我得到了确切的代码。但是当我尝试更新我的帖子时,除了我的头像变量之外,所有内容都可以更新。它更新它,但它以一种奇怪的格式存储它。这是我的更新方法

public function update(Request $request, $id)
    {
        $this->validate($request, [
            'name' => 'required',
            'boat_type' => 'required',
            'rooms' => 'required',
            'price_per_hour' => 'required',
            'price' => 'required',
        ]);

        $boat = Boat::find($id);
      if($file = $request->hasFile('avatar')) {
                $file = $request->file('avatar') ;
                $fileName = $file->getClientOriginalName() ;
                $destinationPath = public_path().'/img/boats/avatars/' ;
                $file->move($destinationPath,$fileName);
                $boat->avatar = $fileName ;
            }
            $boat->save() ;
        $boat_update = $request->all();
        $boat->update($boat_update);
        $request->session()->flash('alert-success', 'Boat Successfully Updated!');
        return redirect('/management');
    }

当我编辑头像变量时,它将它存储在/img/boats/avatars/C:\xampp\tmp\phpFA50.tmp

我不太确定出了什么问题。任何帮助将不胜感激。

【问题讨论】:

    标签: php model-view-controller laravel-5.4


    【解决方案1】:
    1. $boat->save() ;更新前不需要保存->删除

    2. $boat_update = $request->all(); -> 你的文件名不在里面

    3. $boat->update($boat_update); 都是$fillable 的字段吗?如果是,您需要将新文件名添加到该数组中

    【讨论】:

      【解决方案2】:

      找到了解决方案,这几乎是一个逻辑错误,因为我只是保存文件名然后用$request->all()覆盖它

      正确的解决方案是这样的:

      $boat = Boat::find($id);
      $boat->fill($request->except('avatar'));
      if($file = $request->hasFile('avatar')) {
          $file = $request->file('avatar') ;
          $fileName = $file->getClientOriginalName() ;
          $destinationPath = public_path().'/img/boats/avatars/' ;
          $file->move($destinationPath,$fileName);
          $boat->avatar = $fileName ;
      }
      $boat->save();
      
      $request->session()->flash('alert-success', 'Boat Successfully Updated!');
      return redirect('/management');`
      

      【讨论】:

        猜你喜欢
        • 2017-11-10
        • 2023-03-28
        • 2017-10-29
        • 2017-12-16
        • 2019-03-04
        • 1970-01-01
        • 1970-01-01
        • 2017-09-14
        • 2018-04-02
        相关资源
        最近更新 更多