2017-08-18 1 views
0

Ich bin ziemlich neu in Laravel, also versuche ich, einige der Grundlagen zu lernen. Ich habe es geschafft, eine CRUD mit Datei-Upload zu erstellen. Was ich getan habe, war, dass ich einen Ressourcen-Controller erstellt habe. Mein Speicher-Methode:Laravel 5.4 - Aktualisieren eines Datei-Datensatzes

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!'); 
    } 

Diese Methode funktioniert völlig in Ordnung, damit kann ich die Details meiner Datenbank laden und zu speichern und bin in der Lage es meiner Ansicht nach zu manipulieren.

Aber wenn ich versuche, die UPDATE-Methode zu verwenden, habe ich den genauen Code .. noch, wenn ich versuche, meinen Beitrag zu aktualisieren, kann alles außer meiner Avatar-Variable aktualisiert werden. Es aktualisiert es, aber es speichert es in einem seltsamen Format. Hier ist meine Methode 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'); 
    } 

Wenn ich den Avatar Variable bearbeiten speichert es in /img/boats/avatars/C:\xampp\tmp\phpFA50.tmp

Ich bin nicht wirklich sicher, was falsch ist. Jede Hilfe wird sehr geschätzt.

Antwort

0
  1. $boat->save() ; Sie müssen nicht vor der Aktualisierung speichern -> entfernen Sie es

  2. $boat_update = $request->all(); -> Ihr Dateiname ist dort nicht in

  3. $boat->update($boat_update); Sind alle Felder $fillable? Wenn ja Sie den neuen Dateinamen zu diesem Array

0

Fand die Lösung hinzufügen müssen, es war ziemlich viel ein logischer Fehler, wie ich war einfach die Dateinamen zu speichern dann mit der $request->all()

Überschreiben der korrekten Lösung wäre dies:

$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');`