2017-03-10 105 views
1

enter image description hereenter image description here我想更新配置文件,當我更新記錄時,我也沒有更改的舊數據也會更新。Laravel 5.3更新記錄。只更新更改的記錄並保留不變的記錄

我只想更新那些已更改的值。不應更新不變的值。

路線:

Route::post('/profile/settings/{user}', 'Admin\[email protected]')->name('profile.settings'); 

控制器的方法:

public function UpdateProfileSettings(Request $request, User $user) 
{ 

    if (auth()->user()->id == $user->id) { 

     $user->update([ 
      'name' => $request->name, 
      'qualification' => $request->qualification, 
      'institute' => $request->institute, 
      'gender' => $request->gender, 
      'speciality' => $request->speciality, 
      'address' => $request->address, 
     ]); 

     return redirect()->back(); 
    } else { 
     abort(403, "Unauthorized"); 
    } 
} 
+0

我假設你不發送未更改的數據,對嗎? –

+0

我該如何檢查?用戶可以編輯任何字段。 – Afraz

+0

我的意思是$ request->字段的值如果沒有變化。 var_dump這些值並在此顯示。 –

回答

1

你可以嘗試以下

$name = $request->input('name', $user->name); 

對於laravel 5.4: 也makesure是TrimStringsConvertEmptyStringsToNull中間件在應用程序的全球中間人出棧裏面發現了App\Http\Kernel

對於laravel 5.3,您可以手動添加這些中間製品,到你的項目.. 添加TrimgStrings所示here

添加ConvertEmptyStringsToNull將遵循相同的步驟..

創建一個新的文件ConvertEmptyStringsToNull.php

<?php 
namespace App\Http\Middleware; 
class ConvertEmptyStringsToNull extends TransformsRequest 
{ 
    /** 
    * Transform the given value. 
    * 
    * @param string $key 
    * @param mixed $value 
    * @return mixed 
    */ 
    protected function transform($key, $value) 
    { 
     return is_string($value) && $value === '' ? null : $value; 
    } 
} 
  • 通過添加到您的App\Http\Kernel.php

    註冊中間件作爲全球
    protected $middleware = [ 
    \Illuminate\Foundation\Http\Middlewar\CheckForMaintenanceMode::class, 
    \App\Http\Middleware\TransformsRequest::class, 
    \App\Http\Middleware\TrimStrings::class, 
    \App\Http\Middleware\ConvertEmptyStringsToNull::class, 
    ]; 
    
  • +0

    格式化有問題,不確定它是否與stackoverflow或我的瀏覽器(vivaldi)有關。 –