2017-06-22 13 views
3

関連するレジストリを変更する際に、画像の更新について私が提示している小さな不都合を解決する必要があります。Laravel 5.4ファイルが存在する場合は置き換えます

レジストリを変更すると、そのディレクトリにある関連ファイルを置き換えます。

これは私のテーブル構造である:

Schema::create('institutions', function(Blueprint $table) 
     { 
      $table->engine = 'InnoDB'; 
      $table->increments('id'); 
      $table->string('name')->unique(); 
      $table->string('initials')->nullable(); 
      $table->string('description')->nullable(); 
      $table->string('avatar')->default('default.jpg'); 
      $table->timestamps(); 
     }); 

これは私のコントローラ上で私の更新方法である:

public function update(Request $request, $id) 
    { 
     // 

     $institution = $this->institution->find($id); 

     try 
     { 
      $institution->update($request->all()); 

      if($request->hasFile('avatar')){ 
       $avatar = $request->file('avatar'); 
       $filename = time() . '.' . $avatar->getClientOriginalExtension(); 
       Image::make($avatar)->resize(250, 205)->save(public_path('uploads/institutions/' . $filename)); 

       $institution->avatar = $filename; 
       $institution->save(); 
      } 

      $updated = $institution; 

      $message = flash('Institución actualizada correctamente!!!', 'success'); 

      return redirect()->route('instituciones.index')->with('message', $message);  
     }  

     catch(\Illuminate\Database\QueryException $e) 
     { 
      $message = flash('La institución no se actualizó correctamente!!!', 'danger'); 

      return redirect()->route('institutions.create')->with('message', $message); 
     } 

    } 

私はさまざまな方法を試してみましたが、私は成功していません。

+0

どう役立つだろうホープ?例外? 500エラー?もっと具体的にしてください... – idelara

答えて

3

アップロードされた画像は、古いものと置き換えるには同じファイル名でなければなりませんが、この場合はtime()メソッドのために置き換えられません。

あなたは、データベースからファイル名を取得し、新しいイメージを保存

//find data by id 
$institution = $this->institution->find($id); 
$filename = public_path('uploads/institutions/').$institution->avatar; 
if(File::exists($filename)) { 

    $avatar = $request->file('avatar'); 
    $filename_new = time() . '.' . $avatar->getClientOriginalExtension(); 
    Image::make($avatar)->resize(250, 205)->save(public_path('uploads/institutions/' . $filename_new)); 

    //update filename to database 
    $institution->avatar = $filename_new; 
    $institution->save();  
    //Found existing file then delete 
    File::delete($filename); // or unlink($filename); 
} 

で古いものを削除することは、それはあなたが上記のコードを実行したときに起こる

関連する問題