Laravel更新记录,其中某些内容已更改

Laravel更新记录,其中某些内容已更改,laravel,updates,Laravel,Updates,我希望使用write方法更新某些内容已更改的记录。我有以下表格: 问题是当我更改姓名、姓氏或电子邮件,但不更改用户登录名时。在我的确认书中,我写道: 'name' => ['required', 'max:255', 'unique:users'], 但是规则unique:users阻止我在未更改用户名时进行更新 我找到了这个主题,但我不明白什么是“$partnersData”$partnersData是上次更新的日期吗 我写了这个方法: public function update(

我希望使用write方法更新某些内容已更改的记录。我有以下表格:

问题是当我更改姓名、姓氏或电子邮件,但不更改用户登录名时。在我的确认书中,我写道:

'name' => ['required', 'max:255', 'unique:users'],
但是规则
unique:users
阻止我在未更改用户名时进行更新

我找到了这个主题,但我不明白什么是“
$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');
}

我想你可能把事情复杂化了

您可以检查用户表中是否存在该行,然后只更新相关字段-

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

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

return redirect('user')

Laravel
save()
函数运行
isDirty()
函数,并确保只有在任何列发生更改时才会更新数据库。

我认为这可能过于复杂了

您可以检查用户表中是否存在该行,然后只更新相关字段-

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

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

return redirect('user')

Laravel
save()
函数运行
isDirty()
函数,并确保数据库仅在任何列发生更改时更新。

同时
$user->column=$value应该是
$user->$column=$value
缺少列变量前面的
$
,也
$user->column=$value应该是
$user->$column=$value
缺少列变量之前的
$
,无法更新记录循环以满足请求

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())


要更新您的记录,请循环您的请求

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())

“唯一:用户”功能记录我未更改登录名(“名称”)的更新记录

您必须稍微更改验证规则:

'name' => ['required', 'max:255', 'unique:users,name,' . $id],
如果用户是您要更新的用户,则这将忽略唯一性

文档中“强制唯一规则忽略给定ID”下还描述了另一种可能的语法

然后你就可以正常更新了


作为补充信息,更新仅在实际发生更改时有效,否则
处的
updated\u列不会更改

“唯一:用户”功能记录我未更改登录名(“名称”)的更新记录

您必须稍微更改验证规则:

'name' => ['required', 'max:255', 'unique:users,name,' . $id],
如果用户是您要更新的用户,则这将忽略唯一性

文档中“强制唯一规则忽略给定ID”下还描述了另一种可能的语法

然后你就可以正常更新了


作为补充信息,只有在有实际更改时更新才会生效,否则
栏中的
updated\u将不会更改。

问题不清楚。是否要更新记录并获取名称的验证错误?如果要使用验证的
唯一
规则保留您的
名称
,请尝试添加中解释的其他规则。问题不清楚。是否要更新记录并获取名称的验证错误?如果要使用
unique
验证规则保留您的
name
,尝试添加在中解释的其他规则。
updated\u at
列仅在行中实际更新时更新。
updated\u at
列仅在行中实际更新时更新。