2016-12-07 88 views
0

我希望通過寫入方法更新某些內容已更改的記錄。我有表格: enter image description hereLaravel更新記錄,其中的某些內容已更改

問題是當我更改名稱,姓氏或電子郵件,但不更改用戶登錄。在我確認我寫的:

'name' => ['required', 'max:255', 'unique:users'], 

但規則unique:users塊我從更新的時候我並沒有改變用戶名。

我發現這個主題Laravel 5 isDirty() always returns false但我不明白什麼是「$partnersData」。 $partnersData是最近一次更新的日期嗎?

我寫這個方法:

public function update(CreateUserUpdateRequest $request, $id){ 
    $user = User::find($id); 

    foreach ($user as $column => $value) { 
     if ($column === $id) { 
      continue; 
     } 
     $user->$column = $value; 
    } 

    if ($user->isDirty()) { 
     $user->update($request->all()); 
     Session::flash('userUpdateOK', 'Dane użytkonika zostały zaktualizowane poprawnie.'); 
    } 

    return redirect('user'); 
} 
+0

問題不清楚。你想更新記錄並獲取名稱驗證錯誤嗎? – Abhishek

+0

如果您希望您的'name'通過'unique'規則進行驗證,請嘗試添加在[強制忽略給定ID的唯一規則]中解釋的其他規則(https://laravel.com/docs /5.3/validation#rule-unique)。 –

回答

0

我想你可能是過於複雜這一點。

您可以檢查該行存在於用戶表,然後就更新相關的領域 -

$User = User::where('name', $request->input('name'))->first(); 

if($User){ 
    $User->email = $request->input('email'); 
    $User->save(); 
} 

return redirect('user') 

的Laravel save()功能運行isDirty()功能,並確保數據庫將只得到更新,如果任何的列已更改。

+0

'updated_at'列只在行中實際更新某些內容時更新。 – Bugfixer

0

而且$user->column = $value;應該$user->$column = $value;缺少$列變量之前

1

要更新記錄循環您的要求

foreach ($request as $column => $value) { 
    // do something 
} 

在循環內部檢查,如果屬性存在,則更換是否存在

if (property_exists($user, $column)) { 
    $user->$column = $value; 
} 

所以你的代碼會是這樣的

public function update(CreateUserUpdateRequest $request, $id){ 
    $user = User::find($id); 

    foreach ($request as $column => $value) { 
     if (property_exists($user, $column)) { 
      $user->$column = $value; 
     } 
    } 

    if ($user->isDirty()) { 
     $user->save(); 
     Session::flash('userUpdateOK', 'Dane użytkonika zostały zaktualizowane poprawnie.'); 
    } 

    return redirect('user'); 
} 

,或者就Model::set(array())

public function update(CreateUserUpdateRequest $request, $id){ 
    $user = User::find($id); 
    $user->set($request); 

    if ($user->isDirty()) { 
     $user->save(); 
     Session::flash('userUpdateOK', 'Dane użytkonika zostały zaktualizowane poprawnie.'); 
    } 

    return redirect('user'); 
} 
1

功能獨特:用戶的主頻我更新記錄,我不改登錄( 「名」)。

您必須更改驗證規則了一下:

'name' => ['required', 'max:255', 'unique:users,name,' . $id], 

如果用戶要更新的一個這將忽略唯一性。

在「強制忽略給定ID的唯一規則」下的文檔here中還描述了另一種可能的語法。

然後你可以正常更新。

作爲附帶信息,只有在實際更改時更新纔有效,否則updated_at列不會更改。

相關問題