如何验证更新laravel中的唯一电子邮件和唯一名称?

时间:2020-05-03 09:17:24

标签: laravel laravel-validation

这是我的代码:

public function update(User $user)
{
    $this->validate(request(), [
        'name'   => 'required|min:3|max:50|unique:users,name,' . $user->id,
        'email'  => 'required|email|max:255|unique:users,email,' . $user->id,
        'origin' => 'max:50',
        'about'  => 'max:5000',
    ]);
    $user = User::find($user);
    $user->name = request('name');
    $user->original = request('origin');
    $user->email = request('email');
    $user->about = request('about');
    $user->save();

    return back();
}

我收到此错误:

Illuminate\Database\QueryException
SQLSTATE[HY093]: Invalid parameter number (SQL: select * from .... ?))

2 个答案:

答案 0 :(得分:2)

错误可能源自$user = User::find($user);

由于您使用的是Route model binding,因此无需再次加载User

public function update(User $user)
{
    $this->validate(request(), [
        'name'   => 'required|min:3|max:50|unique:users,name,' . $user->id,
        'email'  => 'required|email|max:255|unique:users,email,' . $user->id,
        'origin' => 'max:50',
        'about'  => 'max:5000',
    ]);

    $user->name = request('name');
    $user->original = request('origin');
    $user->email = request('email');
    $user->about = request('about');
    $user->save();

    return back();
}

答案 1 :(得分:-1)

验证函数期望第一个参数作为请求输入数组而不是请求对象。以下代码可以正常工作。

$this->validate (request()->all(), $rules)

您还可以为验证消息传递第三个参数。

相关问题