2016-04-27 68 views
0

我有巨大的用戶更新表單。有時更新包含大量的字段,有時候只有一兩個字段。這是我的代碼:Laravel 5.2根據輸入字段設置模型屬性

public function updateUser(Request $request){ 
    $user = User::where('id',$request->id)->firstOrFail(); 

    if($request->first_name){ 
     $user->first_name= $request->first_name; 
    } 

    if($request->last_name){ 
     $user->last_name = $request->last_name; 
    } 

    if($request->job_name){ 
     $user->job_name= $request->job_name; 
    } 

    //etc.. 20 more fields 

    $user->save(); 

可以根據$request中的字段設置模型屬性嗎?有時候$request包含1個字段,有時候是20個。請注意我想要touch數據庫只有一次,最後使用save()方法。

+0

您是指根據您的要求自動設置屬性? – Abbasi

回答

2
$user->update($request->all()); 

確保所有必需的變量都在你的$fillable陣列指定User模型

如果您想更新模型而不保存使用fill方法

+0

感謝您的回答。但是update()函數會導致更新數據庫。我只想在接觸數據庫之前將所有參數從請求分配到模型。觸摸數據庫應該在腳本的結尾使用save()方法完成。 – Fusion

+1

您正在查找的方法是'fill' https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html#method_fill –

+0

令人驚歎!這正是我正在尋找的。你能否請更新答案,以便我可以接受? – Fusion

0

如果$request字段名稱和Model字段名稱是相同的(因爲它似乎在當前的代碼)試試這個:

$input = $request->all(); $user = User::firstOrFail('id',$input->id); $updateNow = $user->update($input);

另一種選擇是:

DB::table('users') ->where('id', $request->id) ->update($request); //or can use Input::all()

有一個看看它以及更多的解釋:Query Builder

+0

感謝您的回答。但是update()函數會導致更新數據庫。我只想在接觸數據庫之前將所有參數從請求分配到模型。觸摸數據庫應該在腳本的結尾使用save()方法完成。 – Fusion

+0

'save()'之前你還在做些什麼? – Abbasi

0

用戶模型屬性

/** 
* The attributes that are mass assignable. 
* 
* @var array 
*/ 
protected $fillable = [ 
    'name', 'email', 'password', 'facebook_id', 'job_name', '20 more fields...' 
]; 

控制器

public function store(Request $request){ 
    $allRequest = $request->all(); 
    // It is not in table 
    unset($allRequest['_token']); 
    User::create($allRequest); 
}