Laravel 只更新单行

and*_*ats 4 php record laravel

我在使用 laravel 更新数据库中的单个记录时遇到问题。

当我运行此方法并仅给 requestparams 提供“名称”时,数据库中的其他字段将变为空白。如何保留 requestparams 中未指定的值?。

public function update(Request $request, $id)
{
    $user = User::find($id);
    if(!is_null($user)){
        $user->name = $request->input('name');
        $user->email = $request->input('email');
        $user->password = $request->input('password');
        $user->save();
    }else{
        $data = array('msg' => 'The user, you want to update, does not exist', 'error' => true);
        echo json_encode($data);
    }
}
Run Code Online (Sandbox Code Playgroud)

San*_*esh 7

您可以直接对请求输入使用更新方法。这只会更新提供的输入。

$user->update($request->only(['name', 'email', 'password']));
Run Code Online (Sandbox Code Playgroud)

不过要注意的事情很少。您正在尝试直接从输入中更新密码。这是一个不好的做法,可能是错误的,因为 laravel 默认使用 bcrypt 来存储密码。其次,确保您$fillable在模型中设置了属性以防止批量分配。

protected $fillable = [
    'name', 'email', 'password'
];
Run Code Online (Sandbox Code Playgroud)

您也可以使用 mutator 像这样散列密码。

public function setPasswordAttribute($value)
{
    $this->attributes['password'] = bcrypt($value);
}
Run Code Online (Sandbox Code Playgroud)