如何在控制器中使用Laravel中的唯一“电子邮件”字段进行更新?

时间:2019-07-31 03:33:02

标签: php laravel vue.js eloquent axios

我正在尝试创建用户CRUD的更新,但是现在我在此输入中传递了“ edit”视图中电子邮件的值,现在...当我尝试更新时,我无法执行此操作,因为它有一个唯一的电子邮件请求:用户。

我正在通过vue和axios传递可见的数据。后端是Laravel。

视图编辑:

<div class="form-group">
                        <label for="email">Email <span class="help"></span></label>
                        <input type="email" name="email"
                               class="form-control form-control-line" v-model="fillUser.email">
                    </div>

App.js

 editUser: function(user){
            this.fillUser.id = user.id;
            this.fillUser.name = user.name;
            this.fillUser.fLastName = user.fLastName;
            this.fillUser.sLastName = user.sLastName;
            this.fillUser.age = user.age;
            this.fillUser.email = user.email;
            this.fillUser.password = user.password;
            $('#edit').modal('show');
        },

        updateUser: function(id){
            // alert('Nada man');
            var url = 'users/' + id;
            axios.put(url, this.fillUser).then(response => {
                this.getUsers();
                this.fillUser = {'id' : '','name' : '','fLastName' : '','sLastName' : '','age' : '','email' : '','password' : ''};
                this.errors = [];
                $('#edit').modal('hide');
                toastr.success('Usuario actualizado con éxito');
            }).catch(error => {
                this.errors = error.response.data
            });
        },

控制器:

public function update(Request $request, $id)
    {
        $this->validate($request,[
            'email' => 'unique:users',
        ]);

        $usuario = User::whereId($id)->firstOrFail();
        $usuario->name = $request->get('name');
        $usuario->fLastName = $request->get('fLastName');
        $usuario->sLastName = $request->get('sLastName');
        $usuario->age = $request->get('age');
        $usuario->email = $request->get('email');

//        Variables
        $contraseña = $request->get('password');

        //        Si la contraseña está seteada la actualiza, si no es así no deja llenarla de un campo vacío
        if(isset($contraseña))
        {
            $usuario->password = Hash::make($request->get('password'));
        }

        $usuario->save();
}

我想知道如何正确执行更新,如果电子邮件字段未经历未更新的更改,是否经历了更改而不是更新。

1 个答案:

答案 0 :(得分:1)

您可以发送old_email隐藏类型

 if($request->get('email') != $request->get('old_email')){
   $this->validate($request,[
            'email' => 'unique:users',
        ]);
 }