2016-12-07 64 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列不会更改。

相关问题